使用 Ember 动态添加和推送其他对象
Add and push additional objects on the fly with Ember
我正在尝试在我的应用程序中添加和推送其他对象。我在这个jsbin中复制了这个案例
为了实现这一目标,我遵循了本教程,它完全符合我的需求。
我有一个发票清单,任何发票都是由交易组成的。我可以在发票中创建新发票 创建路由,我想在其中添加和推送任何单个交易。
actions: {
add: function() {
var newTransaction = Ember.Object.create({
name: "New Transaction",
quantity: null,
selectedFare: null,
isDone: false
});
return this.get("content").pushObject(newTransaction);
}
在我的模板中,这就是它的外观
<tr>
{{#each controller}}
<td>{{name}} {{input type=checkbox value=isDone checked=isDone}} {{input valueBinding=quantity}} {{view Em.Select prompt="test" contentBinding="controllers.fare.content" optionLabelPath="content.name" optionValuePath="content.id" selectionBinding="controllers.fare.selectedFare" }}</td>
{{/each}}
</tr>
不幸的是,我无法在控制台中真正看到错误。我不知道出了什么问题。
如果从模板中删除{{#each controller}}{{/each}}
,则可以看到单个事务。
我的代码出了什么问题?
我做了一些更改,但它需要改进,请随时提出进一步的问题来改进它。另请参阅 emberjs 指南待办事项示例。可能教程已经过时了,请参阅Ember store.push with hasmany不更新模板?。
我像这样重构了你的添加方法:
add: function() {
var transactionRecord = this.store.createRecord('transaction', {
name: 'new transaction'
});
return this.get("model.transactions").addObject(transactionRecord);
}
循环事务的模板如下所示:
{{#each model.transactions}}
最后,我添加了invoices/index
模板,以便您可以在单击发票时查看发票及其交易:
<script type="text/x-handlebars" data-template-name="invoice/index">
<p> Invoice Index Route</p>
<p> {{title}} </p>
<p> Transactions: </p>
{{#each transactions}}
<ul>
<li> name: {{name}} </li>
<li> quantity: {{quantity}} </li>
</ul>
{{/each}}
</script>
示例:http://jsbin.com/gugukewaka/1/edit
烬#each
助手切换当前作用域,如下所示:
// this context is the controller
{{#each controller}}
<td>{{name}}<td/> // this context is each transaction
{{/each}}
因此,每当您尝试访问controllers
时,您都会尝试在不存在的事务对象上访问它。这在您遵循的教程中起作用的原因是那里的人没有尝试访问控制器属性。不用担心,这会让很多人感到困惑,因此将在未来的余烬版本中弃用。
要解决您的问题,只需使用
// this context is the controller
{{#each transaction in controller}}
<td>{{transaction.name}}<td/> // this context is still the controller
{{/each}}
或在您的特定用例中:
<tr>
{{#each transaction in controller}}
<td>{{transaction.name}} {{input type=checkbox value=transaction.isDone checked=transaction.isDone}} {{input valueBinding=transaction.quantity}} {{view Em.Select prompt="test" contentBinding="controllers.fare.content" optionLabelPath="content.name" optionValuePath="content.id" selectionBinding="controllers.fare.selectedFare" }}</td>
{{/each}}
</tr>
在您正在使用的发票/编辑模板中
{{#each controller}}
但是您的InvoicesCreateController
ObjectController
导致问题的原因。要么不要在模板中使用#each
,因为我不明白为什么需要它,或者如果真的需要它,然后将InvoicesCreateController
更改为ArrayController
。
- 如何使用object.assign()从其他对象引用基本对象属性
- PJAX:记住其他对象状态
- 以编程方式将fabric-js-canvas的图像替换为hq图像,并重新计算其他对象的坐标和大小
- AngularJS:根据其他对象预先选择ng repeat中的select元素
- 如何在 Javascript 中向数组添加其他对象
- 追加子数据 URI,替换 IE 中的其他对象
- 挖空、视图模型位于其他对象和数据绑定中
- 函数中的If语句会创建其他对象
- 对象属性引用JavaScript中的其他对象属性
- 使用map方法将javascript对象数组转换为其他对象数组
- 如何在其他对象中动态生成javascript对象.你能在对象内部使用for循环吗
- 画布对象总是在其他对象后面绘制
- JSON tv4 对象在 true 且存在其他对象时有效
- 视频 src 不会在单击其他对象时重新加载
- Javascript 调用其他对象方法
- JS - 将 和其他对象解析为相关的 HTML
- D3 - 在两个不与其他对象相交的对象之间绘制一条线
- 如何查找触摸移动到其他对象
- 反转对象与其他对象的事件耦合方式
- 将对象的属性与其他对象的属性中的值绑定