将数据从JSON传递到Backbone>模板页面

时间:2013-10-10 02:00:02

标签: javascript json backbone.js underscore.js

所以,我从我继承的项目中得到了这个。

  • 数据的JSON字段。

    defaults:{
        "coolstuff":{uuid: null},
            "coolStartDate":new Date(),
            "coolEndDate": new Date(),
            "cooldata":'',

            "supercool":'', // I am adding this (trying)
         },

来自其他人的一些相关的JS:

  offerStart: function() {
     var date = this.get('coolStartDate')
     return (_.isNull(date)) ? new Date() : helper.formatDate(new Date(date)) ;
  },

在标记内找到并调用其他一些数据作为模板;

<%= cooldata %>

我在尝试抓住'supercool'数据时失败了。我尝试了不同的synatax,页面上,页面外,一切。

我想知道我必须在骨干中做些什么(我很明显是backbone.js的新手)

为了通过JSON使用我的新数据或数据字段'supercool',并允许它作为页面中的模板工作。


在这种特殊情况下;下拉菜单。

 <div class="form-group">
     <select class="form-control filter">
         <option><%= supercool %></option>
         <option><%= supercool %></option>
     </select>
 </div>

更新!


这是我目前第一次使用Backbone.js尝试但仍然失败的尝试。

(1。)模特。的(型号/ page.js)

define([
    'jquery',
    'underscore', 
    'underscore',  // Page > Model
    'backbone',
    'helpers/helpers',
    'bbvalidation'
], function(_, Backbone, Helpers) {
    var helper = new Helpers();
    var offerModel = Backbone.Model.extend({
        urlRoot: "/loyalty/api/supercoolfile",
        idAttribute: 'uuid',
        url: function() {
            return this.urlRoot + '/coolguys/' + this.get("id"); //
        },
            defaults:{
         "supercool": "", // here
        },

(2。)视图。的(视图/仪表板/ page.js)

define([
  'jquery',
  'underscore', // Views -- js/views/page.js
  'backbone',
  'vm',
  'text!templates/dashboard/page.html'
],

  template = _.template(<'<p>Name: <%= supercool %> </p>'),

  render: function() {    
      this.$el.html( this.template( this.model.toJSON() ) );
      return this;
          }

      });
  });

(3。)将数据拉入模板(尝试) /dashboard/page.html

         <option><%= supercool %></option> 

应该工作吧?他们不适合我。


1 个答案:

答案 0 :(得分:1)

我很难确切知道发生了什么,因为我不确定你的所有代码是如何连接的,但如果你有一个如下所示的渲染功能,它应该为你获取'supercool':

template = _.template(<your template here>),

render: function() {    
    this.$el.html( this.template( this.model.toJSON() ) );
    return this;
}

这假设代码的第一位来自传递到视图中的模型。模板将挑选出所需的数据。

编辑:

一篇文章中有很多内容。 Backbone项目不需要集合。它的用途是拥有一系列模型。即您想存储多个商品,而这样做的方式就是收藏品。通过集合,您可以遍历视图中的每个模型来渲染它们。此外,您将模型初始化为offerModel,但将OfferModel作为模型传递给集合。我不明白为什么你重写了集合提取方法。

我不确定这是怎么回事,但看起来有一堆不必要的复杂情况。

第二次编辑:

我创建了一个非常基本的jsfiddle,它向您展示如何在没有大部分无关信息的情况下进行渲染:

http://jsfiddle.net/mmerkes/RdbXH/1/