在knockout.js中添加具有多个属性的新项目
Add new item with multiple properties in knockout.js
我试图添加一个新的项目到一个可观察数组当一个按钮被点击。我几乎在knockout.js网站上遵循这个例子:http://knockoutjs.com/examples/betterList.html
相关的HTML:
<form data-bind="submit:addItem">
<input id="comment" data-bind="value:itemToAdd.comment, valueUpdate: 'afterkeydown'" />
<input type="submit" value="Save contact" />
</form>
正如你所看到的(这是与示例的不同之处),我的"itemToAdd"将有多个属性,其中一个是"comment"。所以我试着像这样绑定它:"value:itemToAdd.comment"(我也试过"value:itemToAdd().comment")。但这似乎行不通。这是我的视图模型的相关部分:
var viewModel = {
contactHistory: [{comment: 'test', date: '12/12/2011'}, {comment: 'test2', date: '12/11/2011'}],
itemToAdd: new ko.observable({ comment: 'dd', date: '' }),
addItem: function () {
alert(this.itemToAdd().comment);
if (this.itemToAdd().comment != "")
{
this.contactHistory.push(this.itemToAdd());
}
}
}
警告总是显示"dd",所以itemToAdd似乎没有正确地绑定到文本框。有人知道我哪里做错了吗?
通常你会做itemToAdd().comment
,但是当数据绑定中的属性不是一个可观察的并且是嵌套的时候,KO实际上不能正确地写。
你当然可以解决它,使comment
一个可观察的:http://jsfiddle.net/rniemeyer/mFkGT/。在这种情况下,如果你不想让itemToAdd
成为一个可观察对象,你就不需要让它成为一个可观察对象。
另一个选择是在绑定到comment
之前进入itemToAdd
的作用域。在1.3中,您可以使用with: itemToAdd
: http://jsfiddle.net/rniemeyer/SDAhd/。如果您不想要额外的span,那么您可以使用无容器绑定,如:http://jsfiddle.net/rniemeyer/ZmDwW/.
在1.3之前,您可以使用带有data
参数的模板绑定来执行如下操作:http://jsfiddle.net/rniemeyer/sb6vD/
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- Redux处理新项目和id
- JQuery Masonry.Ajax图标和“;加载新项目”;绳子放错地方了
- Ng-Repeat在末尾添加新项目
- AngularJs/GitHub :如何在没有任何历史记录的情况下将角度种子克隆到我的新项目中
- 每天从数组中挑选新项目
- 将jquery插件应用于angularJS ng repeat中的新项目
- 使用新项目更新KendoUI网格数据源
- AngularJS ForEach将新项目推送到对象中
- 在 SharePoint 2010 上创建“添加新项目”按钮
- id:在续集中创建新项目时为空
- 新项目的所有列表项弹出窗口在悬停时立即显示 - Javascript
- AngularJS:插入新项目后对列表重新排序
- 扩展菜单插入带有覆盖的新项目
- 如何将新项目添加到 srt 文件中
- 使用 jQuery 显示所有具有空属性的项目
- 如何在 JQGRID 新项目弹出窗口中应用 OnKeyUp 方法
- 在SlickGrid的dataView的第一行添加一个新项目,就像JavaScript的unshift一样
- 当一个新项目被添加到FireBug控制台时,是否有一个jQuery事件等同于
- 在knockout.js中添加具有多个属性的新项目