Ractive:execute 一个模型的方法来自另一个模型
Ractive:execute one model's methods from another model
(我不知道这是一个 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
/apply
。 fiddle
(我不知道这是一个 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
/apply
。 fiddle