2013-01-23 15 views
42

Tôi đang gặp sự cố với dữ liệu * thuộc tính trong knockout.js tức là. viết chúng ra với attr.Làm việc với knockoutjs attr để ghi dữ liệu * thuộc tính

tôi có thể làm điều này mà không có một vấn đề:

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

nhưng nếu tôi muốn sử dụng data-id, cách thường xuyên không làm việc vì vậy tôi đặt một giá duy nhất xung quanh các thuộc tính:

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

cung cấp cho tôi

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 

ai đó có thể xem điều gì đã xảy ra ở đây?

Chúc mừng!

Trả lời

78

Bạn chỉ cần đặt dấu ngoặc kép xung quanh nó:

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

Điều đó đã làm điều đó, cảm ơn. – MikeW

+1

@Michael Best: Cảm ơn, bạn đã giúp tôi giải quyết một vấn đề liên quan. – Phil

+0

Dấu nháy đơn 'cũng hoạt động. – Andrew

0

Dưới đây là một đoạn làm việc minh họa làm thế nào để thiết lập giá trị thuộc tính dữ liệu tùy chỉnh với Knockout:

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

 
$("#result").text($("#test-el").data("someattr"));
<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>

0

Bạn thậm chí không cần phải đặt dấu nháy kép hoặc đơn lẻ quanh tên attr, chỉ cần đơn giản là data-id

<input data-bind='text: Title, attr: {data-id: "Events[" + viewModel.events.indexOf($data) + "].Title"}'/> 
Các vấn đề liên quan