【发布时间】:2014-08-06 19:41:46
【问题描述】:
我有一个 ViewModel,它接受 JSON 来构建 observableArray(),还有一个 selected observable 用于在编辑时存储对象。
var ViewModel = function (data) {
var self = this;
self.list = ko.observableArray(data);
self.selected = ko.observable();
}
我在带有编辑按钮的表格中显示list。编辑时,所选对象进入selected
self.edit = function (o) {
self.selected = ko.observable(o);
}
接下来,我有一个与selected 绑定并显示所有属性的表单。
<form>
<input type="text" data-bind="value: selected().Name">
</form>
问题是我希望显示此表单以添加项目,而不仅仅是在用户单击编辑时显示。但最初,selected observable 未定义并引发错误。另外,当用户点击添加按钮时,我想将selected 中的数据推送到我的observableArray。
最好的方法是什么?我可以在哪里放置自定义绑定以使此方案有效?
更新
我的问题与question 类似。
但我无法为observable 实施给定的解决方案
Fiddle 实现部分问题和建议的解决方案
【问题讨论】:
-
如果没有选中项,则不应使用选中的可观察对象,并且除了“不存在”之外没有任何合理的值。使用 ko-if 更改模板流程。如果有一个选定的项目(即用于编辑或其他),则在适当的模型中存根。
-
@user2864740 - 我想使用相同的表单进行创建和编辑。当从表格中选择一个对象进行编辑时,有一个选中项,但在使用表单创建新对象时没有。另外,我不想拥有一个带有硬编码属性的 ViewModel,因为我有大量的属性。