Skip to content

Instantly share code, notes, and snippets.

@lifesinger
Created May 3, 2012 09:07
Show Gist options
  • Save lifesinger/2584518 to your computer and use it in GitHub Desktop.
Save lifesinger/2584518 to your computer and use it in GitHub Desktop.
eventproxy questions

朴灵的 EventProxy, README 里有个例子:

var proxy = new EventProxy();
var render = function (template, data, l10n){
    _.template(template, data);
};
proxy.assign("template", "data", "l10n", render);
$.get("template", function (template) {
    // something
    proxy.trigger("template", template);
});
$.get("data", function (data) {
    // something
    proxy.trigger("data", data);
});
$.get("l10n", function (l10n) {
    // something
    proxy.trigger("l10n", l10n);
});

第一反应,用 seajs 等模块加载器会非常简单:

var render = function (template, data, l10n){
    _.template(template, data);
};

seajs.use(["path/to/template", "path/to/data", "path/to/l10n"], function(template, data, l10n) {
  render(template, data, l10n);
});

如果不是文件下载,而是其他一些什么操作,比如:

function done(a, b, c) { ... }

doSomething('A', function(a) {
  doSomething('B', function(b) {
     doSomething('C', function(c) {
         done(a, b, c);
     });
  });
});

不用 eventproxy, 利用普通的 events 模型,也挺容易写的:

function done(a, b, c) { ... }

var eventObj = new Events();

doSomething('A', function(a) {
    eventObj.trigger('step', a);
});

doSomething('B', function(b) {
    eventObj.trigger('step', b);
});

doSomething('C', function(c) {
    eventObj.trigger('step', c);
});

var data = [];
var global = this;

eventObj.on('step', function(o) {
  data.push(o);
  if (data.length === 3) {
    done.apply(global, data);
  }
});

我好像没看到 EventProxy 的更大价值-.-
朴灵能再详细介绍介绍么?

@lifesinger
Copy link
Author

@onlytiancai
Copy link

你好,我写了一个事件管理的库,能满足我之前提到的需求,就是多个异步任务流互相依赖,我的用法如下

em.setup({
    'sequence': ['worker1', 'worker2', 'worker3'],
    'worker1.error, worker2.error': 'default_error_handler',
    'worker1': function(){console.log('worker1 success')}
});
em.start();

源码见这里:https://gist.github.com/2643056
你看这个库实用吗,有没有意义。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment