骨干Javascript - 找不到功能?

时间:2012-04-12 17:29:40

标签: javascript backbone.js

我不断收到“filterMessages不是函数”错误。这是Backbone View类 - 不知道它为什么找不到这个函数。

这是Firebug中的错误 filterMessages未定义 第152行(filterMessages(“all”)。each(function(message){

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

        });
    }

});

2 个答案:

答案 0 :(得分: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);
        });
    });
}

答案 1 :(得分:0)

只需定义"这个"作为内部函数之外的变量,因为在内部函数内部它将采用不同的属性。

primaryFunction : function() {
    var self = this;

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