在{{#linkTo}} helper <a>标记上设置自定义数据属性

Lux*_*Lux 19 custom-data-attribute ember.js

如何data-{{#linkTo}}帮助程序上设置自定义属性?我想用这个:

{{#linkTo "foo" data-toggle="dropdown"}}foo{{/linkTo}}
Run Code Online (Sandbox Code Playgroud)

结果应如下所示:

<a id="ember323" class="ember-view active"  data-toggle="dropdown" href="#/foo/123">foo</a>
Run Code Online (Sandbox Code Playgroud)

但它看起来像:

<a id="ember323" class="ember-view active"  href="#/foo/123">foo</a>
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

int*_*xel 29

您可以这样做的方法是扩展您的知识Ember.LinkComponent以了解新属性:

Ember.LinkComponent.reopen({
  attributeBindings: ['data-toggle']
});
Run Code Online (Sandbox Code Playgroud)

然后你可以在你的{{#link-to}}助手中使用它:

{{#link-to 'foo' data-toggle="dropdown"}}Foo{{/link-to}}
Run Code Online (Sandbox Code Playgroud)

这将导致:

<a id="ember262" class="ember-view active" href="#/foo" data-toggle="dropdown">Foo</a>
Run Code Online (Sandbox Code Playgroud)

因为attributeBindings是一个数组,你可以在那里放置你可能需要的多个属性:

attributeBindings: ['data-toggle', 'foo', 'bar']
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.


Lux*_*Lux 9

@intuitivepixel

谢谢

你帮了很多忙.有了这些信息,我就使用了LinkView,并且能够找到一个通用的解决方案:

Em.LinkView.reopen({
    init: function() {
        this._super();
        var self = this;
        Em.keys(this).forEach(function(key) {
            if (key.substr(0, 5) === 'data-') {
                self.get('attributeBindings').pushObject(key);
            }
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 在Ember 2.0+中,视图已被弃用.请改用"Ember.LinkComponent.reopen". (6认同)
  • 此解决方案或多或少地添加到官方文档中:http://guides.emberjs.com/v1.10.0/templates/binding-element-attributes/#toc_adding-data-attributes (2认同)