Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 将自定义属性添加到集合的每个项_Backbone.js_Handlebars.js - Fatal编程技术网

Backbone.js 将自定义属性添加到集合的每个项

Backbone.js 将自定义属性添加到集合的每个项,backbone.js,handlebars.js,Backbone.js,Handlebars.js,我试图将自定义属性添加到集合的每个项中,但它没有显示在模板中 我有很多报价单都有客户id。现在我想通过client\u id获取客户机,并将其添加到集合条目中。一般来说,它在使用console.log检查填充的对象时起作用,但它不会显示在模板中 我就是这样尝试的: sprocket.QuotationsView = Backbone.View.extend({ id: 'content-inner', initialize: function(options) {

我试图将自定义属性添加到集合的每个项中,但它没有显示在模板中

我有很多报价单都有
客户id
。现在我想通过
client\u id
获取客户机,并将其添加到集合条目中。一般来说,它在使用
console.log
检查填充的对象时起作用,但它不会显示在模板中

我就是这样尝试的:

sprocket.QuotationsView = Backbone.View.extend({
    id: 'content-inner',

    initialize: function(options) {
      // instantiate Collection
      this.collection = new Quotations();

      // compile Handlebars template
      this.tpl = Handlebars.compile(this.template);
    },

    render: function() {
      var self = this;
      var obj = this.el;

      // get quotations and set data to handlebars template
      $.when(this.collection.fetch()).then(function(quotations) {

        $.each(quotations, function(i, quotation) {

          var loadContact = new Contact({id: quotation.contact_id}).fetch();
          $.when(loadContact).then(function(contact) {
            quotations[i]['contact'] = contact;
          });

        });

        $(obj).html(self.tpl(quotations));

      // if response is empty (no quotations in database), set empty template
      }, function() {
        $(obj).html(self.tpl);
      });

      return this;
    }
});
我的模板如下所示:

<div>
  {{#if .}}
    {{#each .}}
      {{number}} <!-- this works -->
      {{contact}} <!-- this doesn't work -->
      {{contact.name}} <!-- this doesn't work too -->
    {{/each}}
  {{/if}}
</div>

{{#如果}
{{{#每个。}
{{number}}
{{contact}}
{{contact.name}
{{/每个}}
{{/if}

这是因为实际上更改
quote.attribute.contact
内数据的回调(即您的
quotes[i]['contact']=contact;
行)是在获取
联系人之后执行的,而该联系人恰好是在呈现模板之后

$.each(quotations, function(i, quotation) {

  var loadContact = new Contact({id: quotation.contact_id}).fetch();
  // This is the callback that is being executed after the backend responds
  $.when(loadContact).then(function(contact) {
     quotations[i]['contact'] = contact;
  });

});

// This is the template rendering which is before the server has time to respond
$(obj).html(self.tpl(quotations));
取回所有
联系人
并将其添加到
报价单
后,改为渲染模板

解决此问题的快速方法:

  • 在包含回调的函数中创建一个循环,用于加载所有
    联系人
  • 在加载所有
    联系人后调用回调
  • 回调应该呈现模板

  • 这是我个人的观点,绝不是对这个问题的回答:我不喜欢后端的数据逻辑和同一类中的视图呈现和逻辑。我使用
    Backbone.marionete
    视图
    控制器
    拆分为两个不同的实体,通过事件松散耦合。只有
    控制器
    知道
    视图
    ,只有
    视图
    知道
    DOM

    ,这是因为回调实际上更改了
    quote.attribute.contact
    中的数据(即您的
    quotes[i]['contact']=contact;
    行)在获取
    联系人
    之后执行,该联系人恰好在呈现模板之后

    $.each(quotations, function(i, quotation) {
    
      var loadContact = new Contact({id: quotation.contact_id}).fetch();
      // This is the callback that is being executed after the backend responds
      $.when(loadContact).then(function(contact) {
         quotations[i]['contact'] = contact;
      });
    
    });
    
    // This is the template rendering which is before the server has time to respond
    $(obj).html(self.tpl(quotations));
    
    取回所有
    联系人
    并将其添加到
    报价单
    后,改为渲染模板

    解决此问题的快速方法:

  • 在包含回调的函数中创建一个循环,用于加载所有
    联系人
  • 在加载所有
    联系人后调用回调
  • 回调应该呈现模板

  • 这是我个人的观点,绝不是对这个问题的回答:我不喜欢后端的数据逻辑和同一类中的视图呈现和逻辑。我使用
    Backbone.marionete
    视图
    控制器
    拆分为两个不同的实体,通过事件松散耦合。只有
    控制器
    知道
    视图
    ,只有
    视图
    知道
    DOM

    ,这是因为回调实际上更改了
    quote.attribute.contact
    中的数据(即您的
    quotes[i]['contact']=contact;
    行)在获取
    联系人
    之后执行,该联系人恰好在呈现模板之后

    $.each(quotations, function(i, quotation) {
    
      var loadContact = new Contact({id: quotation.contact_id}).fetch();
      // This is the callback that is being executed after the backend responds
      $.when(loadContact).then(function(contact) {
         quotations[i]['contact'] = contact;
      });
    
    });
    
    // This is the template rendering which is before the server has time to respond
    $(obj).html(self.tpl(quotations));
    
    取回所有
    联系人
    并将其添加到
    报价单
    后,改为渲染模板

    解决此问题的快速方法:

  • 在包含回调的函数中创建一个循环,用于加载所有
    联系人
  • 在加载所有
    联系人后调用回调
  • 回调应该呈现模板

  • 这是我个人的观点,绝不是对这个问题的回答:我不喜欢后端的数据逻辑和同一类中的视图呈现和逻辑。我使用
    Backbone.marionete
    视图
    控制器
    拆分为两个不同的实体,通过事件松散耦合。只有
    控制器
    知道
    视图
    ,只有
    视图
    知道
    DOM

    ,这是因为回调实际上更改了
    quote.attribute.contact
    中的数据(即您的
    quotes[i]['contact']=contact;
    行)在获取
    联系人
    之后执行,该联系人恰好在呈现模板之后

    $.each(quotations, function(i, quotation) {
    
      var loadContact = new Contact({id: quotation.contact_id}).fetch();
      // This is the callback that is being executed after the backend responds
      $.when(loadContact).then(function(contact) {
         quotations[i]['contact'] = contact;
      });
    
    });
    
    // This is the template rendering which is before the server has time to respond
    $(obj).html(self.tpl(quotations));
    
    取回所有
    联系人
    并将其添加到
    报价单
    后,改为渲染模板

    解决此问题的快速方法:

  • 在包含回调的函数中创建一个循环,用于加载所有
    联系人
  • 在加载所有
    联系人后调用回调
  • 回调应该呈现模板

  • 这是我个人的观点,绝不是对这个问题的回答:我不喜欢后端的数据逻辑和同一类中的视图呈现和逻辑。我使用
    Backbone.marionete
    视图
    控制器
    拆分为两个不同的实体,通过事件松散耦合。只有
    控制器
    知道
    视图
    ,只有
    视图
    知道
    DOM

    您在
    quotes[i]['contact']=contact上放置了断点
    contact
    是您所期望的吗?我猜不是……正如我所说:
    一般来说,它在使用console.log检查填充的对象时有效。
    …您是否在
    引用[I]['contact']=contact
    contact
    是您所期望的吗?我猜不是……正如我所说:
    一般来说,它在使用console.log检查填充的对象时有效。
    …您是否在
    引用[I]['contact']=contact
    contact
    是您所期望的吗?我猜不是……正如我所说:
    一般来说,它在使用console.log检查填充的对象时起作用。。。