Ember.js – 将按钮操作从 #each 循环绑定到其自己的模型
Ember.js – Binding a button action from an #each loop to its own model
我似乎无法获得在#each
模板循环中生成的按钮将其单击操作绑定到其关联的模型。这是问题的快速演示...
Ember.js
应用设置:
window.Contacts = Ember.Application.create();
Contacts.Person = Ember.Object.extend({
first: '',
last: '',
save: function() {
// send updated information to server.
}
});
Contacts.contactsList = Ember.ArrayController.create({
content:[],
init: function() {
this.pushObject( Contacts.Person.create({
first:'Tom',
last:'Riddle'
}));
}
});
模板:
<script type="text/x-handlebars">
{{#each Contacts.contactsList}}
<li>
{{view Ember.TextField valueBinding="first" viewName="firstname"}}
{{view Ember.TextField valueBinding="last" viewName="lastname"}}
<button {{action "save" on="click"}}>Save</button>
</li>
{{/each}}
</script>
问题:
因此,这个简单演示场景中的想法是,每条记录的"保存"按钮将触发一个操作来保存其自身模型的状态。但是,单击"保存"按钮会出现错误:
Uncaught TypeError: Cannot call method 'call' of undefined
我的假设是,将"保存"指定为按钮的操作会将其绑定到其模型上的save
方法。然而,情况似乎并非如此。其他一些对象似乎正在处理单击操作,其中未定义"保存"手柄。我在这里错过了什么吗?如何使每个行项的按钮调用其自己的模型上的处理程序?
提前感谢任何帮助!
您可以通过设置 - 惊喜 - target
属性来定义操作的目标,请参阅 http://jsfiddle.net/pangratz666/FukKX/:
<script type="text/x-handlebars" >
{{#each Contacts.contactsList}}
<li>
{{view Ember.TextField valueBinding="first" viewName="firstname"}}
{{view Ember.TextField valueBinding="last" viewName="lastname"}}
{{#with this as model}}
<button {{action "save" target="model"}}>Save</button>
{{/with}}
</li>
{{/each}}
</script>
需要操作周围的{{#with}}
帮助程序,因为不知何故操作帮助程序不接受this
作为target
。
但要注意你的设计:应该在视图或控制器上调用操作。然后,目标负责执行进一步的操作,例如保存,...
所以我将按如下方式实现您的示例,请参见 http://jsfiddle.net/pangratz666/U2TKJ/:
车把:
<script type="text/x-handlebars" >
{{#each Contacts.contactsList}}
<li>
{{view Ember.TextField valueBinding="first" viewName="firstname"}}
{{view Ember.TextField valueBinding="last" viewName="lastname"}}
<button {{action "save" target="Contacts.contactsController" }}>Save</button>
</li>
{{/each}}
</script>
JavaScript:
Contacts.contactsController = Ember.Object.create({
save: function(event) {
console.log('do something with: ', event.context);
}
});
可能的方法
{{#each answer in effort_reasons itemController="module_answer"}}
{{/each}}
因此,每个项目都有自己的控制器,其中模型是每个项目(在本例中为答案),这对于输入视图之类的东西特别有用,其中 valueBinding 将导致将每个输入视图绑定到相同的值。请注意,这是 Ember 中的控制器不是单例并且具有不同 ID 的唯一一次,如果您想将值保存在原始控制器中,您可以通过以下方式获取引用
this.get('controller.parentController')
在您的项目控制器中。
或者您在每个循环中使用上述操作方法
{{action "actionname" parameter paramter2...}}
- 注册OpenLayers事件时,即使使用匿名函数或绑定,JavaScript关闭也会触发循环内的所有内容
- Jquery将循环变量绑定到getJSON函数
- JsViews复选框从内部循环绑定
- 如何将InfoBoxes与googlemaps实用程序库v3绑定到循环中的点击侦听器
- jQuery使用最后一个参数在Javascript循环中单击绑定函数
- 动态绑定onclick事件为for循环中的所有按钮提供相同的值
- 在绑定到内部$http函数时运行无限摘要循环
- 通过 for 循环绑定会产生错误的结果
- Angularjs 指令,函数双向绑定陷入无限循环
- 使用 jQuery 将事件绑定到具有 for 循环的多个元素
- 余烬每循环加倍.使用内部每个循环变量的值绑定到外部每个循环的变量中命名相同的属性
- 在 Foreach 循环中使用 IF 条件来比较数据绑定值
- Ember.js – 将按钮操作从 #each 循环绑定到其自己的模型
- 绑定一个 onclick 函数,对象作为在循环中创建的锚标记上的参数
- 循环访问 Knockout - 绑定错误中的不同对象的数组
- 循环绑定对象
- 循环中的闭包:在循环中声明的变量在绑定事件侦听器时未正确预设到处理程序函数中
- 绑定到窗口调整大小导致在flexslider上调用resize时出现循环
- 循环绑定以查找循环数
- 用函数参数绑定循环索引