Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 敲除JS值不显示/绑定/更新,但可通过ko.toJS($data.value)获得_Javascript_Knockout.js - Fatal编程技术网

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