2014-11-01 74 views
0

我有一个Backbone应用程序。Backbone.js Uncaught ReferenceError下划线模板

的json看起来像这样,

{ 
    "cities": [ 
    "Kävlinge", 
    "Lund", 
    "Enskede", 
    "Vadstena" 
    ] 
} 

我的骨干收集代码

var Cities = Backbone.Collection.extend({ 
    url: 'configuration/city.json' 
}); 

var Index = Backbone.View.extend({ 
    initialize: function(){ 
    this.cities = new Cities(); 
    }, 
    el: '.page', 
    render: function(){ 
    var self = this; 
    this.cities.fetch({ 
     success: function(cities){ 
     console.log(cities.models[0].attributes.cities); 
     var template = _.template($('#city-dropdown').html(),{cities: cities.models[0].attributes}); 
     self.$el.html(template()); 
     } 
    }); 
    } 
}); 

var Router = Backbone.Router.extend({ 
    routes: { 
    '' : 'home' 
    } 
}); 
var router = new Router(); 

var index = new Index(); 
router.on('route:home',function(){ 
    index.render(); 
}); 

Backbone.history.start(); 

该声明的console.log下划线模板函数打印之前我必需的JSON阵列,但在我的脚本标签,它只是Uncaught ReferenceError:城市没有定义,

是我的Json不正确,或者是我的骨干代码不正确,我很困惑。似乎很傻。请协助。

<script type="text/template" id="city-dropdown"> 
     <select class="selectpicker"> 
     <%= _.each(cities, alert) %> 
     </select> 
    </script> 
+0

最近更改了'_.template'的行为(请参见重复项),我怀疑您看到了操作中的更改。 – 2014-11-01 17:49:37

回答

1

由于下划线1.7.0:

Underscore templates no longer accept an initial data object. _.template always returns a function now.

所以现在用于设置模板选项_.template函数的第二个可选的参数。将对象传递给complied函数:

var template = _.template($('#city-dropdown').html()); 
self.$el.html(template({ 
    cities: cities.models[0].attributes // cities.toJSON() 
})); 
+1

但是直到1.7.0(2014-08-26发布),你可以说'_.template(template_source,data)'直接进入HTML而不需要中间步骤。很多教程和旧代码还没有赶上。 – 2014-11-01 17:51:29