2012-04-12 3 views
1

Я продолжаю получать ошибку «errorMessages is not a function». Вот класс Backbone View - не знаю, почему он не может найти функцию.Backbone Javascript - функция не найдена?

Вот ошибка в Firebug filterMessages не определен линии 152 (filterMessages ("все"). Каждая (функция (сообщение) {

MessageListView = Backbone.View.extend({ 

    defaults : { 
     filterString : "all" 
    }, 

    initialize : function() { 

     this.collection.on("add", function(model) { 
      var view = new MessageView({model: model}); 
      $("div.cameras").prepend(view.render().el); 
     }); 

     this.collection.on("remove", function(model) { 
      var ID = model.id; 
      $("#message-" + ID).parent("div.message").remove(); 
     }); 

     this.collection.on("reset", function(models) { 
      $("div.cameras").empty(); 
      filterMessages("all").each(function(message) { 
       var view = new MessageView({model: message}); 
       $("div.cameras").prepend(view.render().el); 
      }); 

     }); 

    }, 

    setFilter : function(filterString) { 
     this.filterString = filterString; 
     this.collection.reset(this.collection); 
    }, 

    filterMessages : function(filterString) { 
     return this.collection.filter(function(model){ 

      if (filterString == "all") 
      { 
       return true; 
      } 
      else if (filterString == "active") 
      { 
       return model.get("ignore") == "0"; 
      } 
      else if (filterString == "ignore") 
      { 
       return model.get("ignore") == "1"; 
      } 
      else if (filterString == "flag") 
      { 
       return model.get("flag") == true; 
      } 

     }); 
    } 

}); 

ответ

5

Вы хотите назвать его в контексте вид:

initialize : function() { 

    var self = this; 

    // code here 

    this.collection.on("reset", function(models) { 
     $("div.cameras").empty(); 
     self.filterMessages("all").each(function(message) { 
      var view = new MessageView({model: message}); 
      $("div.cameras").prepend(view.render().el); 
     }); 
    }); 
} 
+0

нет, это не сработало – bluedevil2k

+0

Я обновил пример, чтобы исправить область действия. – rjz

+0

Да, это и было. Благодарю. Досадная «особенность» JS. – bluedevil2k

0

Просто определить «это» в качестве переменной за пределами вашей внутренней функции, потому что она будет принимать другое свойство, когда внутри вашей внутренней функции

.
primaryFunction : function() { 
    var self = this; 

    innerFunction : function(filterString) { 
     self.someOtherFunction(); 
    }; 
}