web-dev-qa-db-fra.com

Travailler avec knockoutjs attr pour écrire des attributs de données *

Je rencontre un problème avec les attributs data * dans knockout.js c'est-à-dire. en les écrivant avec attr.

Je peux le faire sans problème:

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

mais si je veux utiliser data-id, la méthode habituelle ne fonctionne pas, alors je mets un seul guillemet autour de l'attribut:

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

ce qui me donne 

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

quelqu'un peut-il voir ce qui s'est mal passé ici?

À votre santé!

44
MikeW

Vous avez juste besoin de mettre des guillemets doubles autour:

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

Vous trouverez ci-dessous un extrait de code expliquant comment définir une valeur d'attribut de données personnalisée avec 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>

1
g.carey

Vous n'avez même pas besoin de mettre des guillemets simples ou doubles autour du nom d'attr, il vous suffit simplement d'utiliser data-id

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