在我的页面顶部,我获取隐藏输入字段的值,将其存储为变量,然后尝试在我的Backbone代码中使用它。但是,该值显示未定义。如何首先获取该字段的值,然后初始化我的骨干应用程序?
<script>
$(document).ready(function(){
var whitedealsToken = $('#usertoken').val();
console.log(whitedealsToken)
WhiteDeals.initialize();
});
</script>
编辑:下面的完整主干代码
window.WhiteDeals = {
Models: {},
Collections: {},
Views: {},
Routers: {},
initialize: function() {
new WhiteDeals.Routers.Deals();
if (!Backbone.history.started) {
Backbone.history.start();
Backbone.history.started = true;
}
}
};
WhiteDeals.Routers.Deals = Backbone.Router.extend({
routes: {
"": "index"
},
index: function() {
var deals = new WhiteDeals.Collections.Deals();
var dealsview = new WhiteDeals.Views.DealsIndex({
el: $('#container')
});
}
});
WhiteDeals.Collections.Deals = Backbone.Collection.extend({
model: WhiteDeals.Models.Deal,
url: 'http://lvh.me:3000/api/v1/special_deals?access_token=' + whitedealsToken,
parse: function(response) {
return response.results;
},
// Overwrite the sync method to pass over the Same Origin Policy
sync: function(method, model, options) {
var that = this;
var params = _.extend({
type: 'GET',
dataType: 'jsonp',
url: that.url,
processData: false
}, options);
return $.ajax(params);
}
}); // End Collection
答案 0 :(得分:1)
在函数中声明变量时,它仅在本地范围内可用。所以在该功能之外它不存在。
点击此链接:http://msdn.microsoft.com/en-us/library/ie/bzt2dkta(v=vs.94).aspx
您可以将其设为全局:
whitedealsToken = $('#usertoken').val(); // no var keyword
或者将其作为其他全局对象的属性:
WhiteDeals.whitedealsToken = $('#usertoken').val();
或者将其传递到您的initialize
方法并执行以下操作:
var whitedealsToken = $('#usertoken').val();
console.log(whitedealsToken)
WhiteDeals.initialize(whitedealsToken);
这最后一个本身不会修复它,你将不得不做更多的工作来在某些时候将令牌传递给实例化的集合。
答案 1 :(得分:1)
您在扩展调用中引用了whitedealsToken
,该调用基本上是在脚本运行时执行的。由于whitedealsToken
实际上并没有在$(document).ready之前分配一个值,所以在你尝试使用它时它将是未定义的。在为相关变量指定了值之后,您需要将.extend调用调用相同的$(文档).ready block 。