javascript - 具有 attr 绑定(bind)的数据绑定(bind)动态命名的 data-* 属性

标签 javascript knockout.js

我发现了几个类似的问题,但似乎没有一个能准确解决这个问题。

我正在尝试根据“标签”列表向元素添加属性。每个标签都是一个组的一部分。该组将是属性名称,标签将全部在值中。

基本上,我想执行类似这样的操作:

<ul data-bind="foreach: Options">
  <li>
    <a href="#" 
       data-bind="text: $data, 
                  attr: { 'data-' + $parent.Name : $data, 
                          'data-multiselect': $parent.IsMultiSelect.toString(), 
                          'rel': $parent.Name }">
    </a>
  </li>
</ul>

代码的重要部分是attr: { 'data-' + $parent.Name : $data...

我已经尝试了各种方法来完成这项工作,例如预先确定属性名称、计算属性名称、调用函数等,但 knockout 不会处理它们。

最佳答案

我认为自定义绑定(bind)在这里是合适的。像这样:

ko.bindingHandlers.customDataAttr = {
    update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
      var key = valueAccessor().name;
      var val = valueAccessor().val;
      element.setAttribute(key, val);
      
      // see that it's been set:
      console.log(element);
    }
};

var ViewModel = function() {
  var self = this;
  self.Options = ['A', 'B', 'C'];
  self.Name = ko.observable("my-name");
  self.IsMultiSelect = 'false';
  
  self.dataAttrName = ko.computed(function(){
    return 'data-' + self.Name();
  });
};

ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<ul data-bind="foreach: Options">
  <li>
    <a href="#" class="x"
       data-bind="text: $data, 
                  customDataAttr: { val: $data, name: $parent.dataAttrName() },
                  attr: { 'data-multiselect': $parent.IsMultiSelect.toString(), 
                          'rel': $parent.Name }">
    </a>
  </li>
</ul>

关于javascript - 具有 attr 绑定(bind)的数据绑定(bind)动态命名的 data-* 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27261578/

相关文章:

javascript - 订阅循环中的属性 - KnockoutJs

javascript - 无法将带 Angular 列中的数字相加

javascript - 多看少看按钮

javascript - knockout View 模型功能仅影响最后一个实例

javascript - 在 Knockout JS 中使用按键事件

jquery - Knockout.js 加载内容后调用 jQuery 函数

grails - 绑定(bind)不是来自 ViewModel 的值

javascript - Adobe AIR - 在新创建的窗口上使用 EventListener 的正确方法是什么?

javascript - js中break语句的用法

javascript - Qualtrics 中分支逻辑后的后退按钮