Javascript 把手#每个循环内动作辅助对象的范围
我对{{#each}}块中的作用域感到困惑 如果我有车把脚本Javascript 把手#每个循环内动作辅助对象的范围,javascript,ember.js,handlebars.js,Javascript,Ember.js,Handlebars.js,我对{{#each}}块中的作用域感到困惑 如果我有车把脚本 <script type="text/x-handlebars"> {{#each vars}} <button {{action foo}}> {{name}} </button> {{/each}} </script> 脚本可以很好地看到{{name}并将其作为按钮的标题,正如您所期望的那样,但是操作不会绑定到数组成员中定义的foo函数 有没有什
<script type="text/x-handlebars">
{{#each vars}}
<button {{action foo}}> {{name}} </button>
{{/each}}
</script>
脚本可以很好地看到{{name}
并将其作为按钮的标题,正如您所期望的那样,但是操作不会绑定到数组成员中定义的foo
函数
有没有什么方法可以做到这一点,而我却没有,或者我需要重构以使foo
直接在ApplicationController
中定义?
这可能是由于根元素造成的,请检查此处的发布以了解更多信息您可以在
ApplicationController
上设置事件,并传入单个对象并调用存储的foo()
。在{{{each vars}}…{{/each}
块内,您可以使用this
将实际对象传递给事件处理程序
JS:
App.ApplicationController = Ember.Controller.extend({
vars: Ember.ArrayController.create({
content: [
{ name: "Cow",
foo: function(){console.log("moo");}
},
{ name: "Cat",
foo: function(){console.log("meow");}
}
]
}),
doFoo: function(obj) {
obj.foo();
}
});
{{#each vars}}
<button {{action doFoo this}}> {{name}} </button>
{{/each}}
把手:
App.ApplicationController = Ember.Controller.extend({
vars: Ember.ArrayController.create({
content: [
{ name: "Cow",
foo: function(){console.log("moo");}
},
{ name: "Cat",
foo: function(){console.log("meow");}
}
]
}),
doFoo: function(obj) {
obj.foo();
}
});
{{#each vars}}
<button {{action doFoo this}}> {{name}} </button>
{{/each}}
{{#每个变量}
{{name}}
{{/每个}}
这就是我最后要做的,我只是想知道这是否完全必要。你也可以去掉
Ember.ArrayController
并将vars
设置为一个数组。我认为你不能在那些内部的foo
方法上使用{{action}
,因为它们不是视图、控制器或可以接受事件的路由器……你可以在数组上循环,但以后不能添加,所以我只是习惯于使用ArrayController你应该能够添加/修改它们。Ember修改默认的数组
,并添加扩展其功能的mixin,因此您可以使用pushObject
和其他帮助程序以Ember跟踪绑定的方式修改数组。