我是骨干新手,我正在努力了解如何在视图中保持范围。在javascript中,我通常将对象设置为一种类,并使用self = this来维护整个类的范围。我正试图在骨干中做同样的事情。我有这样的设置:
var app = app || {};
app.TwitterView = Backbone.View.extend({
el: '#twitter-container',
tweets: [],
initialize: function( templateContent ) {
this.render(templateContent);
},
render: function(templateContent) {
this.$el.html(this.template(templateContent));
this.loadTweets();
return this;
},
loadTweets: function(){
console.log('load tweets');
this.tweets = [];
clearInterval(this.tweetCheckInterval,this.tweetCycleInterval);
$.ajax({
url: "scripts/php/mixitup.php",
type: "GET",
dataType: 'json',
cache: false,
success: function (data) {
console.log(data);
for (var i=0; i<data.statuses.length;i++){
var tweet = {};
tweet.status = data.statuses[i].text;
tweet.user = data.statuses[i].user.screen_name;
app.TwitterView.tweets.push(tweet);
所以你可以在最后一行看到我正在尝试维护对我的tweets数组的引用,所以我可以推送每个推文,但它找不到数组推文。我该如何保留这个范围?
答案 0 :(得分:1)
我想出了这个 - 用jquery ajax你可以使用context:this作为一个对象参数,所以在里面你仍然可以引用this.tweets
答案 1 :(得分:0)
app.TwitterView
是一个类型(类),您可以创建它的实例。所以你必须引用当前实例(this
),而不是类名:
var app = app || {};
app.TwitterView = Backbone.View.extend({
el: '#twitter-container',
tweets: [],
loadTweets: function(){
var self = this;
$.ajax({
url: "scripts/php/mixitup.php",
type: "GET",
dataType: 'json',
cache: false,
success: function (data) {
console.log(self.tweets) //need to be able to access that tweets array here.
debugger;
答案 2 :(得分:0)
还可以使用.bind()
来保持范围:
$.ajax({
url: "scripts/php/mixitup.php",
type: "GET",
dataType: 'json',
cache: false,
success: function (data) {
console.log(data);
for (var i=0; i<data.statuses.length;i++){
var tweet = {};
tweet.status = data.statuses[i].text;
tweet.user = data.statuses[i].user.screen_name;
this.tweets.push(tweet);
}
}.bind(this)
不需要var self = this;
然后......