【发布时间】:2018-02-24 17:35:50
【问题描述】:
我有一个绑定 HTML 元素的 observable:
{ model: processing: { "errorMsg": "save Failed", "msgType": "info" } };
this.processing= ko.observable()
数据绑定为:
<p data-bind="text: processing().errorMsg"></p>
<p data-bind="text: processing().msgType"></p>
另一个保存用户键入的值的 observable。
self.sessionUserData=ko.observableArray();
//Computed Observable : Contains user selected UI data to save in DB.
self.UserSelectedData=ko.computed(function(){
var obj = {
editableMetadata : self.editableMetadata,
sessionUserData : self.sessionUserData };
return obj;
},null,
{
deferEvaluation: true
}
);
我想订阅 errorMsg 以便我可以相应地更新 sessionUserData observable,如下所示。
self.processing.ErrorMsg.subscribe(function (obj) {
self.sessionUserData().totalErrMsg=obj;
});
以上订阅根本不起作用。 有没有办法做到这一点。
注意:还有其他类似处理的 observable,其任务只是绑定 html 元素。这个想法是用 UI 选择的数据填充 sessionUserData observable,以便它可以作为 ko 发送。 tojson(UserSelectedData) 到服务器。
【问题讨论】:
-
ErrorMsg 不是可观察的...
-
我也试过这样但没有用。 self.processing.subscribe(function (obj) { self.sessionUserData().totalErrMsg=obj.errorMsg; });
-
您只能订阅 observables,即使您要订阅父对象
processing,那么您也只能在父对象更改时获得更新。这意味着如果更新其中的不可观察属性 (errorMsg),您将不会获得更新。哪些对象正在更新?它可能有助于为我们提供一个场景。 -
@Stanislas:我也尝试过 'self.processing.subscribe(function (obj) { self.sessionUserData().totalErrMsg=obj.errorMsg; });'但是在加载页面时执行,而不是在 '' 更新为其他值时执行。