Javascript 敲除JS值不显示/绑定/更新,但可通过ko.toJS($data.value)获得
我有一个奇怪的问题,至少我觉得很奇怪 以下内容将不显示任何内容:Javascript 敲除JS值不显示/绑定/更新,但可通过ko.toJS($data.value)获得,javascript,knockout.js,Javascript,Knockout.js,我有一个奇怪的问题,至少我觉得很奇怪 以下内容将不显示任何内容: <input type="text" data-bind="value: selectedAddress.street1" /> 确实如此 { "id": 5631, "street1": "Some Adress 43", "street2": null, "postcode": "15850", "city": "GhostTown", "country": "UK", "addressTypes"
<input type="text" data-bind="value: selectedAddress.street1" />
确实如此
{
"id": 5631,
"street1": "Some Adress 43",
"street2": null,
"postcode": "15850",
"city": "GhostTown",
"country": "UK",
"addressTypes": []
}
如何使输入字段正确绑定到对象属性并相应地显示/更新值?
视图模型:
var theViewModel = function() {
var self = this;
self.no = ko.observable();
self.name = ko.observable();
self.addresses = ko.observableArray([]);
self.selectedAddress = ko.observable(new Address());
...
}
我做错了什么?括号仅在某些情况下是可选的,但在引用对象的属性(可能是也可能不是可观察对象的值)时不是可选的。因此,您需要显式使用括号来获取可观察的
selectedAddress
的值。然后,您可以参考此对象的属性street1
(括号现在是可选的):
这是单向绑定的解决方案(不会更新值) 这里引用了KnockoutJS文档 如果引用的不是简单属性,例如复杂的JavaScript表达式或子属性,KO会将表单元素的初始状态设置为该值,但当用户编辑表单元素时,它将无法写回任何更改。在这种情况下,它是一个一次性的值设置器,而不是真正的绑定 要获得双向绑定功能,请使用模板。 比如:
<script type="text/html" id="someTemplate">
<input type="text" data-bind="value: street1" />
</script>
<div data-bind="template: { name: 'someTemplate', data: selectedAddress }"></div>
如果有人有同样的问题,并且对该部分感到疑惑
self.selectedAddress = ko.observable(new Address());
您可能会问是否需要创建构造函数或对象来填充ko.observable函数,当然可以,但是如果您不喜欢为这个函数创建模型,只需添加一个空数组,括号方法就可以了
例如:
self.selectedAddress = ko.observable([]);
然后:
selectedAddres().street1
这可能不适用于其他情况,但到目前为止,它适用于我。谢谢你的回答,节省了我很多时间 请尝试
data bind=“value:selectedAddress().street1”
-我不确定连接观察值时是否支持隐式括号。谢谢帮助。现在可以用了!!妮可,想这样做作为回答,这样就可以接受了吗?:)好主意,谢谢。我用几句话概括了这一点,请接受我的回答,以便清楚地表明这个问题的答案已经找到。
self.selectedAddress = ko.observable(new Address());
self.selectedAddress = ko.observable([]);
selectedAddres().street1