使用knockoutjs attr来编写数据*属性

时间:2013-01-23 01:26:17

标签: knockout.js custom-data-attribute

我遇到了knockout.js中数据*属性的问题,即。用attr写出来。

我可以毫无问题地做到这一点:

<input data-bind='text: Title, attr: {name: "Events[" + viewModel.events.indexOf($data) + "].Title"}'/>

但如果我想使用data-id,常规方式不起作用,所以我在属性周围加上一条引号:

<input data-bind='text: Title, attr: {'data-id': "Events[" + viewModel.events.indexOf($data) + "].Title"}'/>

给了我

Error: Unable to parse bindings.
Message: SyntaxError: missing } in compound statement;
Bindings value: attr: {
http://127.0.0.1:21254/Scripts/knockout/knockout-2.2.0.js

有人可以看到这里出了什么问题吗?

干杯!

3 个答案:

答案 0 :(得分:81)

你只需要在它周围加上双引号:

<input data-bind='text: Title, attr: {"data-id": "Events[" + viewModel.events.indexOf($data) + "].Title"}'/>

答案 1 :(得分:1)

下面是一个工作片段,说明如何使用Knockout设置自定义数据属性值:

&#13;
&#13;
ko.applyBindings({
  somevalue: 'foo',
  title: 'Knockout custom data attribute binding --  example'
});

$("#result").text($("#test-el").data("someattr"));
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<div data-bind="text: title, attr: {'data-someattr': somevalue}" id="test-el"></div>

<p>
  <b>Test data attribute expected value:</b> foo
</p>

<p>
  <b>Test data attribute value: </b>
  <span id="result"></span>
</p>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

你甚至不需要在attr名称周围加上双引号或单引号,只需简单地data-id

<input data-bind='text: Title, attr: {data-id: "Events[" + viewModel.events.indexOf($data) + "].Title"}'/>