Knockout.js 淘汰-具有启用功能的Foreach函数

Knockout.js 淘汰-具有启用功能的Foreach函数,knockout.js,Knockout.js,我目前有一个带有数据绑定foreach语句的div。在这个div中有一个按钮,它使用“click:$parent.loadWebcam”。所有这些都起作用,loadWebcam函数被调用,它将从foreach传递数据并处理按下的按钮 我试图实现的是以同样的方式使用enable数据绑定。我希望它将数据从父级传递到一个名为“IsButtonneEnabled”的函数,但是,它似乎没有按照我希望的方式工作。这是我为isButtonEnabled构建的函数,我是否遗漏了什么?或者启用数据绑定不能以这种方

我目前有一个带有数据绑定foreach语句的div。在这个div中有一个按钮,它使用“click:$parent.loadWebcam”。所有这些都起作用,loadWebcam函数被调用,它将从foreach传递数据并处理按下的按钮

我试图实现的是以同样的方式使用enable数据绑定。我希望它将数据从父级传递到一个名为“IsButtonneEnabled”的函数,但是,它似乎没有按照我希望的方式工作。这是我为isButtonEnabled构建的函数,我是否遗漏了什么?或者启用数据绑定不能以这种方式使用吗

var currentStream = "";
self.isButtonEnabled = function(profile) {
    return ko.observable(ko.toJS(profile).URL != currentStream);
};
页面上的剪贴画如下:

<div class="jog-panel" id="camControl">
    <h1>Webcams</h1>
    <div data-bind="foreach: settings.settings.plugins.multicam.multicam_profiles">
        <button class="btn btn-block control-box" data-bind="click: $parent.loadWebcam, text: name, enable: $parent.isButtonEnabled">Default (before bind)</button>
    </div>
</div>

网络摄像机
默认值(绑定前)

谢谢

我建议,因为您希望在单击按钮时更新启用状态,所以您可以将该逻辑添加到单击事件中,而不是使用单独的功能。
isButtonEnabled
可以是一个正常的可观察变量,而不是一个函数,并且该变量通过单击事件更新

  self.loadWebcam = function(profile) {
      profile.isButtonEnabled(ko.toJS(profile).URL != currentStream);
      console.log(ko.toJS(profile).URL);
  };
var currentStream=“测试url”;
函数viewModel(){
var self=这个;
var profile1={URL:'test URL',name:'test profile',isButtonEnabled:ko.observable(true)};//测试数据
var profile2={URL:'other URL',name:'other profile',isButtonEnabled:ko.observable(true)};//测试数据
self.multicam_profiles=ko.observatarray([profile1,profile2]);
self.loadWebcam=功能(配置文件){
profile.isButtonEnabled(ko.toJS(profile.URL!=currentStream);
log(ko.toJS(profile.URL);
};
}
应用绑定(新的viewModel())

currentStream:“测试”
网络摄像机
默认值(绑定前)

您在配置文件参数的IsButtonneEnabled函数中获得了哪些数据?该函数是否被点击了?到目前为止,它似乎还没有被调用,或者至少它没有显示任何console.log消息。我从click数据绑定中知道,它会得到一个敲除数组,其中包含所单击按钮的名称和URL。enable绑定更多的是用于控制DOM元素是否可根据模型中的布尔可观察值进行更新。正如您现在配置的那样,我不确定该函数何时会被调用。您希望该功能何时启动?什么用户操作会导致启用状态的更改?我希望每次按下一个按钮时都会更改。这就是我至少更新currentStream的值的时候。关键是要禁用与currentStream具有相同URL值的按钮,因为该流将已加载。这似乎确实使数据绑定实际工作,但它最终禁用了我的foreach中的每个按钮,而不仅仅是单击的按钮。@MichaelMorris啊,是的,我的错误。每个按钮都需要自己的“IsButtonneEnabled”可观察。我会更新我的样品