Ractive:execute 一个模型的方法来自另一个模型

Ractive:execute one model's methods from another model

参考:this jsfiddle

(我不知道这是一个 Ractive 问题还是一个普通的-javascript 问题)

我有一个 Ractive 模型,"item":

window.item = new Ractive({
  el: "#container",
  template: "<p>words</p>",
  oninit: function() { window.little_ractive.set({ 'thing_to_do': this.do_this, 'item': this }); },
  do_this: function() { this.say("yeah baby"); },
  say: function(what) { console.log(what); }
});

注意模型在另一个 Ractive模型中初始化了两个属性,看起来像这样:

window.little_ractive = new Ractive({
  finish: function() { this.get('thing_to_do').apply(this.get('item')); }
});

我们可以观察到 little_ractive 已使用指向项目模型及其 "do_this" 方法的属性正确初始化。

如果我们现在执行:

little_ractive.finish()

上下文 ('this') 在 "do_this" 方法中建立不正确,它 returns 一个错误 "this.say() is not a function"

如何从一个 Ractive 模型中执行另一个模型的方法?

更新: jsfiddle 使用 Ractive 版本 1.0.0 build9。 Ractive 版本 0.7.3 没有出现这个问题,它按预期工作。

更新:意外行为首次出现在版本0.8.0

任何存储在 ractive 实例数据根目录下的函数都会自动绑定到该实例,例如ractive.set('foo', function () { console.log('this will always be ractive'); })。这样调用根函数就可以在模板中按预期执行。

如果您移动 不需要 需要绑定一个深度的函数,例如ractive.set('fns.foo', function () { console.log('this is not bound'); }),然后你可以传递它们,并根据需要 call/applyfiddle