2013-07-04 2 views
0

Я использую backbone.marionette.js, и я могу заполнить значение для таблицы, но перед попыткой получить значение для выбранной строки мне приходится сталкиваться с проблемой.Как получить значение идентификатора данных

Ниже мой шаблон:

<td><%= firstName %></td> 
<td><%= lastName %></td> 
<td><%= designation %></td> 
<td> 
    <a href="#" data-id='<%= userid %>'> 
    <img src="assets/img/add.png" id="add-puppet-button" alt="Add Row" /> 
    </a> 
    <img src="assets/img/remove.png" id="remove-puppet-button" alt="Remove Row"/> 
</td> 

данные есть в data-id. Когда я отлаживаю, я вижу, что это undefined. Я пытаюсь сделать это следующим образом:

accordianView : function(e){ 
    e.preventDefault(); 
    var userid = $(e.currentTarget).data("userid"); 
    var puppet = new PuppetModel(); 
    puppet = PuppetTable.puppetCollection.get(userid); 
    console.log("firstName : "+puppet.get("firstName")); 
    console.log("lastName : "+puppet.get("lastName")); 
    console.log("Designation : "+puppet.get("designation")); 
} 

Какая ошибка я здесь делаю? Пожалуйста, помогите мне исправить это.

ответ

0

Лучше всего указать ссылку ID или класс, а затем использовать jQuery data method.

0

По умолчанию в вашем шаблоне доступны только те атрибуты, которые указаны в вашем экземпляре модели. Кажется, что userid не относится к модели, поэтому он не будет определен.

Вы можете либо прикрепить атрибут к модели, либо (более чистый способ) определить функцию serializeData в вашем представлении, чтобы обогатить данные, предоставленные для представления: предоставить объект со всеми атрибутами кукольных экземпляров и добавить userid.

Вы можете увидеть пример serializeData здесь: https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/common/views.js

Документация по отношению к нему здесь: https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.itemview.md#itemview-serializedata

2

var userid = $(e.currentTarget).data("userid");

должно быть:

var userid = $(e.currentTarget).data("id");

0

You используют представление марионетки. Вам не нужно извлекать данные из Dom.

Просто сделать

var userid = this.model.get("userid");

Backbone и марионетка сделать это, так что вы не должны хранить данные в Дом. У вас есть модель для этого.

Хотя

var userid = $(e.currentTarget).data("id");

бы работать. Это плохой шаблон для использования с backbone.js

+0

Как вы это сделаете, если это один элемент в коллекции? – Baz

+0

Itemviews знают конкретную модель из той коллекции, к которой они привязаны. – MarkKGreenway

+0

Если вы визуализируете коллекцию, а затем помещаете событие клика на каждый элемент, в clickHandler нет ссылки на отдельную модель? – Baz

Смежные вопросы