我想制作可观察的可观察对象。例如:
var Project = function(id, name, custId) {
this.id = ko.observable(id);
this.name = ko.observable(name);
this.custId = ko.observable(custId);
}
var viewModel = function() {
this.newUpProj = ko.observable(new Project(null,null,null));
...
}
像这样......我希望newUpProject
是可观察的,它的属性是可观察的。我也试过this.newUpProj = ko.mapping.fromJS(new Project());
Edit1:它创建了对象,但它的属性(id,name ...)不是可观察的...
Edit2:在html中使用:
<div class="modal-body">
<p><input type="text" id="projNameTx" data-bind="value: newUpProj.name()" /></p><br>
<p><select data-bind="options: customers, optionsCaption: 'Choose...', value: newUpProj.custId(), optionsText: 'name', optionsValue: 'id'"
size="1"></select></p>
</div>
<div class="modal-footer">
<button class="btn" data-bind="click: clearModal" aria-hidden="true">Close</button>
<button class="btn btn-primary" data-bind="click: updateFlag() ? updateProject : addProject, enable: newUpProj.custId() && newUpProj.name()">Save</button>
</div>
在输入和选择中加载正确的值,但如果输入为空(例如),则保存按钮永远不会禁用,因为更改不会转到模型。
答案 0 :(得分:5)
可能只是需要在绑定中执行newUpProj?
enable: newUpProj().custId() && newUpProj().name()
如果失败了,您可以尝试创建一个计算的observable,根据custId和name的状态设置为true或false
答案 1 :(得分:5)
管理这个: http://jsfiddle.net/wF7xY/1/
var Model = function() {
this.data = ko.observable({}); // It doesn't work
};
var Data = {
field1: 'test1',
field2: 'test2'
};
var model = new Model();
ko.applyBindings(model);
ko.mapping.fromJS(Data, {}, model.data);
model.data.valueHasMutated();
HTML:
<div data-bind="text: data().field1 ? data().field1() : ''"></div>
感谢您的帮助。