淘汰JS广播按钮在每个循环中绑定

发布于 2025-01-24 07:16:00 字数 3901 浏览 1 评论 0原文

即使文本匹配单选按钮值,我也无法检查单选按钮。 `

  <div class="well pull-left clearfix" style="margin:5px;width:90px;padding:5px;" data-bind="click: $root.select_litho_layer_definition, css: {'background-highlight': $root.current_litho_layer_definition() === $data}">
    <p class="text-center tight-padding no-margin"><strong data-bind="text: layer_name"></strong></p>
    <div class="btn-group" style="width:90px">
      <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown" style="width:90px">
        <span data-bind="text: 'Rev.' + revision"></span>
        <span class="caret"></span>
      </button>
      <ul class="dropdown-menu small-list" data-bind="foreach: $root.litho_layer_name_definitions()[_.indexOf($root.litho_layer_names(), layer_name)]" style="width:90px">
        <li><a data-bind="text: 'Rev.' + revision, click: $root.litho_layer_name_select_revision"></a></li>
      </ul>
    </div>
      
      <!-- ko foreach: exposure_array_names-->
    
    <input type="radio" name="ExposureGroup" value="$parent.layer_name+$data" data-bind="click: $root.litho_layer_name_select_exposure,  checked:$root.litho_layer_exposure"/>
    <span data-bind="text: $data"></span><br>
    <!--/ko-->
  </div>
<!-- /ko -->

`

litho_layer_name_selected_definitions具有称为exposus_array_names的exposures

现在,对象结构看起来像这样。

{
    "litho_layer_definition_sk": 90000026426,
    "exposure_array_names": [
        "IF1_EDGE",
        "Combined"
    ],
    "layer_name": "3HG",
    "revision": 0
}

在JS中,我创建了一个可观察的对象的litho_layer_expuse

self.litho_layer_exposure = ko.observable(true);
self.litho_layer_exposure = ko.computed(function() {
      var maskset = self.maskset();
      if (!maskset) return [];

      var defs = maskset.litho_layer_definitions;
      if (_.isEmpty(defs)) return [];

      var name = self.current_litho_layer_name();
      if (!name) return [];

     var revision = self.current_litho_layer_revision();
      if (!_.isNumber(revision)) return;


_.reduce(defs, function(memo, d) {
        if (d.layer_name === name && d.revision === revision){
        memo.push(_.last(d.exposure_array_names));
    }
        return memo;
      }, []);
    });
    self.litho_layer_exposure.subscribe(function(exposure) {
      if (!_.isEmpty(exposure)) self.current_litho_layer_exposure(_.last(exposure));
    });

https://i.sstatic.net/sy2ix.png“ alt =“无线电按钮”>

我尝试进行以下更改,这也不起作用

self.litho_layer_exposure = ko.computed({
    read: function () {
       
      var maskset = self.maskset();
      if (!maskset) return [];

      var defs = maskset.litho_layer_definitions;
      if (_.isEmpty(defs)) return [];

      var name = self.current_litho_layer_name();
      if (!name) return [];

     var revision = self.current_litho_layer_revision();
      if (!_.isNumber(revision)) return;

    /*var exposure = self.current_litho_layer_exposure();
      if (!exposure) return [];*/

 return _.reduce(defs, function(memo, d) {
        if (d.layer_name === name &&  d.revision === revision) memo.push(d.default_exposure_name);
        return memo;
      }, []);
    },
    write: function (value) {
        //update your self.chosenAge().population value here
self.current_litho_layer_exposure(value);
self.litho_layer_exposure(value);
    },

    owner: self
});
    self.litho_layer_exposure.subscribe(function(exposure) {
      if (!_.isEmpty(exposure)) self.current_litho_layer_exposure(_.last(exposure));
    });

I'm unable to get the radio button checked even with the text matching the radio button value.
`

  <div class="well pull-left clearfix" style="margin:5px;width:90px;padding:5px;" data-bind="click: $root.select_litho_layer_definition, css: {'background-highlight': $root.current_litho_layer_definition() === $data}">
    <p class="text-center tight-padding no-margin"><strong data-bind="text: layer_name"></strong></p>
    <div class="btn-group" style="width:90px">
      <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown" style="width:90px">
        <span data-bind="text: 'Rev.' + revision"></span>
        <span class="caret"></span>
      </button>
      <ul class="dropdown-menu small-list" data-bind="foreach: $root.litho_layer_name_definitions()[_.indexOf($root.litho_layer_names(), layer_name)]" style="width:90px">
        <li><a data-bind="text: 'Rev.' + revision, click: $root.litho_layer_name_select_revision"></a></li>
      </ul>
    </div>
      
      <!-- ko foreach: exposure_array_names-->
    
    <input type="radio" name="ExposureGroup" value="$parent.layer_name+$data" data-bind="click: $root.litho_layer_name_select_exposure,  checked:$root.litho_layer_exposure"/>
    <span data-bind="text: $data"></span><br>
    <!--/ko-->
  </div>
<!-- /ko -->

`

Each of the litho_layer_name_selected_definitions has an array of exposures called exposure_array_names

Now object structure looks like this.

{
    "litho_layer_definition_sk": 90000026426,
    "exposure_array_names": [
        "IF1_EDGE",
        "Combined"
    ],
    "layer_name": "3HG",
    "revision": 0
}

In the js, I have created an observable object of litho_layer_exposure

self.litho_layer_exposure = ko.observable(true);
self.litho_layer_exposure = ko.computed(function() {
      var maskset = self.maskset();
      if (!maskset) return [];

      var defs = maskset.litho_layer_definitions;
      if (_.isEmpty(defs)) return [];

      var name = self.current_litho_layer_name();
      if (!name) return [];

     var revision = self.current_litho_layer_revision();
      if (!_.isNumber(revision)) return;


_.reduce(defs, function(memo, d) {
        if (d.layer_name === name && d.revision === revision){
        memo.push(_.last(d.exposure_array_names));
    }
        return memo;
      }, []);
    });
    self.litho_layer_exposure.subscribe(function(exposure) {
      if (!_.isEmpty(exposure)) self.current_litho_layer_exposure(_.last(exposure));
    });

Radio Buttons

I tried making the below change, which didn't work either

self.litho_layer_exposure = ko.computed({
    read: function () {
       
      var maskset = self.maskset();
      if (!maskset) return [];

      var defs = maskset.litho_layer_definitions;
      if (_.isEmpty(defs)) return [];

      var name = self.current_litho_layer_name();
      if (!name) return [];

     var revision = self.current_litho_layer_revision();
      if (!_.isNumber(revision)) return;

    /*var exposure = self.current_litho_layer_exposure();
      if (!exposure) return [];*/

 return _.reduce(defs, function(memo, d) {
        if (d.layer_name === name &&  d.revision === revision) memo.push(d.default_exposure_name);
        return memo;
      }, []);
    },
    write: function (value) {
        //update your self.chosenAge().population value here
self.current_litho_layer_exposure(value);
self.litho_layer_exposure(value);
    },

    owner: self
});
    self.litho_layer_exposure.subscribe(function(exposure) {
      if (!_.isEmpty(exposure)) self.current_litho_layer_exposure(_.last(exposure));
    });

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月下伊人醉 2025-01-31 07:16:00

我很确定最初的错误是

value="$parent.layer_name+$data"

将所有输入带来字面意思“ $ parent.layer_name+$ data”作为值,

您可能想使用databinding来填充属性

data-bind="attr:{value: $parent.layer_name+$data}, checked: ..." 

I´m pretty sure the initial error is

value="$parent.layer_name+$data"

which should lead to all inputs have literally "$parent.layer_name+$data" as value

you probably wanted to use a databinding to fill the attribute

data-bind="attr:{value: $parent.layer_name+$data}, checked: ..." 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文