【问题标题】:Use JSON key in Backbone click event在 Backbone 点击事件中使用 JSON 键
【发布时间】:2014-08-05 00:28:13
【问题描述】:

我的模板显示正确。

我想在每个模板上放置一个点击事件。点击功能需要使用 JSON 密钥,但我不知道如何访问。

模板:

        <script id="lib-list-item-template" type="text/template">
          <a href="javascript:;" class="list-group-item lib-list-item">
            <div class="col-md-7">
                <h4 class="list-group-item-heading"><%= library_name %></h4>
                <p class="list-group-item-text"><%= street_address %></p>
                <p class="list-group-item-text"><%= city %>, <%= state %> <%= zip %></p>
                <p class="list-group-item-text"><%= phone_number %></p>
              </div>
            </div>
          </a>
        </script>

主干:

$(document).ready(function() {

var Library = Backbone.Model.extend({
});

var LibraryList = Backbone.Collection.extend({
  model: Library,
  url: 'hours.json'
});

var LibraryView = Backbone.View.extend({
  el: '#libs',
  template: _.template($('#lib-list-item-template').html()),
  collection: libraries,
  events: {
    "click .lib-list-item": "activate",
  },
  activate: function(event) {
  },
  render: function(event) {

    _.each(this.model.models, function(library) {
      var libraryTemplate = this.template(library.toJSON());
      $(this.el).append(libraryTemplate);
    }, this);

    return this;
  }
});

var libraries = new LibraryList();
var librariesView = new LibraryView({model: libraries});

libraries.fetch({
  dataType: 'json',
  success: function() {
    librariesView.render();
  }
});

在我的activate View 的点击功能中,如何访问myID JSON 键?

  activate: function(event) {
       //I've tried <%= myID %> 
       console.log(something);
  },

【问题讨论】:

  • myID JSON 密钥是什么?你的意思是集合中每个模型的 id 吗?
  • myIDhours.json 中的一个键
  • 在每个库对象中
  • 您的 HTML 模板似乎不完整。它缺少 的开始标记。
  • @PatrickM 已修复,为了清晰起见,我删除了一些部分,但我错过了那个标签。 HTML 模板工作正常

标签: javascript json backbone.js


【解决方案1】:

您所在位置的最简单方法是将 id 放在模板中的 data-id 属性中(不确定您的 &lt;a&gt; 的确切语法,因为问题中缺少它):

<a class="lib-list-item" data-id="<%= myID%>"></a>

然后,从激活处理程序中执行以下操作:

activate: function(event) {
    // Pick the id from the data-id attribute of the clicked element.
    var myID = $(event.currentTarget).data('id');
    console.log(myID);
}

【讨论】:

  • event.currentTarget 在委托环境中通常是更好的选择。
  • 抱歉,重新添加了&lt;a&gt; 标签。我会为多个键做什么?我是 Backbone.js 的初学者,但对我来说,流程是 Backbone -> HTML 模板 -> Backbone 而不仅仅是 Backbone 似乎很奇怪
  • 完整的解决方案是让 LibraryList 视图包含整个列表,以及 LibraryItem 视图的多个实例,用于呈现列表的每个元素。应该在 LibraryItem 视图以及 events 属性上定义激活函数。每个 LibraryItem 视图都包含对其模型(Library 的实例)的引用,因此可以使用 this.model.get('myID'); 访问 id;
  • 顺便说一句,您可以使用idAttribute 配置将您的 myID 属性映射到 Backbone 的智能 id 属性。这将允许使用this.model.id 而不是this.model.get('myID')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 2015-01-18
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多