Ractive:从另一个模型

时间:2017-08-12 18:27:51

标签: ractivejs

参考:this jsfiddle

(我不知道这是一个反复的问题还是一个普通的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已正确初始化,其属性指向项目模型及其&#34; do_this&#34;方法

如果我们现在执行:

little_ractive.finish()

上下文(&#39;此&#39;)在&#34; do_this&#34;中错误地建立了方法,并返回错误&#34; this.say()不是函数&#34;

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

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

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

1 个答案:

答案 0 :(得分:1)

存储在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