Javascript 如何在松散耦合的敲除对象中设置值
我有两个对象项目和设置,我想夫妇。 这对于显示数据非常有效。但是,当我想要设置数据时(在本例中带有复选框),视图仅在第一次单击时响应。这是我的代码的简化版本:Javascript 如何在松散耦合的敲除对象中设置值,javascript,knockout.js,loose-coupling,Javascript,Knockout.js,Loose Coupling,我有两个对象项目和设置,我想夫妇。 这对于显示数据非常有效。但是,当我想要设置数据时(在本例中带有复选框),视图仅在第一次单击时响应。这是我的代码的简化版本: Settings = function (data) { var self = this; self.settingsID = data.settingsID; self.projectID = data.projectID; self.isVisible = ko.observable(data.isV
Settings = function (data) {
var self = this;
self.settingsID = data.settingsID;
self.projectID = data.projectID;
self.isVisible = ko.observable(data.isVisible || true);
return self;
}
Project = function (data) {
var self = this;
self.projectID = data.projectID;
return self;
}
关键是projectd
我定义了以下功能(将在多个视图模型上重用):
在我的viewModel中,关系的定义如下:
ViewModel = function (meID) {
self.selectedProject = ko.observable();
// some code setting the value of 'self.selectedProject'…
// settings
self.Settings = ko.observableArray();
$.ajax({
url: "/myService/GetSettingsByUserId",
data: "userID=" + meID,
dataType: 'json',
success: function (allData) {
self.Settings($.map(allData, function (item) {
return new Settings(item);
}));
}
});
self.getSettings = function (data) { return my.utils.getSettings(data.projectID, self.Settings) };
};
在我看来,我得到了以下HTML:
<div data-bind="with: selectedProject">
<div class="checkbox">
<label>
<input type="checkbox" data-bind="checked: $root.getSettings($data)().isVisible" />
<label>is Visible</label>
</label>
</div>
</div>
可见
为什么第一次之后复选框不会更新?
我想这是因为无法通过“my.utils.getSettings”更新设置对象,但为什么?
我哪里出错了 我确信self.isVisible=ko.observable(data.isVisible | | true);(false或true=true,true或true=true,所以这总是=true。布尔代数我认为它被称为。我可能错了,但在我看来这就是它的样子。据我所知(某物| | |其他某物)只有在某物返回为null或无时才起作用。例如,如果(某物!==null否则“thisissomething”)我确信self.isVisible=ko.observable(data.isVisible | | | true);(false或true=true,true或true=true,所以这总是=true。布尔代数我认为它被称为。我可能是错的,但在我看来这就是它的样子。据我所知(某物| |某物)只有在某物返回为null或无时才起作用。即如果(something!==null,否则为“thisissomething”)
<div data-bind="with: selectedProject">
<div class="checkbox">
<label>
<input type="checkbox" data-bind="checked: $root.getSettings($data)().isVisible" />
<label>is Visible</label>
</label>
</div>
</div>