2017-08-12 97 views
0

裁判:this jsfiddleRactive:从另一个模型执行一个模型的方法

(我不知道这是否是一个Ractive问题或一个普通的老JavaScript的问题)

我有一个Ractive模型, “项目”:

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() 

上下文(“本”)被错误地建立在“do_this”的方法,并返回一个错误“this.say()不是一个函数”

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

更新: jsfiddle使用Ractive版本1.0.0 build9。 Ractive版本0.7.3不会出现这个问题,它可以像预期的那样工作。

更新:意外行为首次出现在版本0.8.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/apply它们。 fiddle

相关问题