2013-03-28 48 views
1

在我的页面顶部,我获取隐藏输入字段的值,将其作为变量存储,然后尝试在我的Backbone代码中使用它。但是,该值显示为未定义。我怎样才能获得该领域的价值,然后初始化我的骨干应用程序?Javascript变量在Backbone中显示为undefined

<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

当您记录它时,或者当您尝试将它用于集合中的“url”时,它是否未定义? – 2013-03-28 05:03:29

+0

它在记录时被定义,在使用url时被定义为undefined。 – ac360 2013-03-28 05:08:57

+0

你是否在初始化函数中扩展你的模型和集合?作为'.extend()'中的参数传递的变量将仅在调用'.extend()'时包含它们的值,所以除非在'whitedealsToken'已设置之后扩展它们(您不应该这样做)他们不会适当地引用它。 – metadept 2013-03-28 05:13:16

回答

1

您在您的扩展调用中引用了whitedealsToken,这个调用基本上在脚本运行后立即执行。由于whitedealsToken在$(document).ready之前实际上没有被赋值,所以在你尝试使用它的时候它将会是未定义的。您需要将您的.extend呼叫放在之内同样的$(document).ready块之后您已经为相关变量分配了一个值。

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); 

这最后一个本身不会解决它,你将不得不做一些更多的工作来将令牌传递到实例化的集合中。

+0

谢谢保罗,但我无法得到任何这些工作。我粘贴了上面的完整代码。 – ac360 2013-03-28 05:42:55