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>