Как я могу вызвать статическую функцию Backbone.Model из экземпляра этой модели без указания имени модели? - PullRequest
8 голосов
/ 28 июня 2011

У меня есть статические свойства, к которым я хотел бы получить доступ из экземпляров моих объектов Backbone.Model.Я знаю, что мог бы жестко закодировать родительский конструктор для вызова метода, но это мешает мне иметь полиморфные статические функции.Например, я хотел бы иметь возможность переопределить функцию foo в ExtendedInventory при необходимости, без необходимости изменения какого-либо другого кода.

var Inventory = Backbone.Model.extend({},
    //STATIC
    {
        foo: function() {
            alert('bar');
        }
    });

var i = new Inventory({});
i.constructor.foo(); //This works!

var ExtendedInventory = Inventory.extend({});

var ei = new ExtendedInventory({});
ei.constructor.foo(); //THIS DOES NOT WORK


//How do I generically access the `Inventory.foo()` function via the `ei` object. I would 

Ответы [ 2 ]

4 голосов
/ 30 июня 2011

Хм.Хотя приведенный выше код работает, я бы так не оставил.Если функция логически доступна через объект класса, тогда определите метод экземпляра в базовом классе, который вызывает функцию класса / «static».Это делает код чище и яснее, я думаю (плюс, клиентам не нужно запоминать несколько загадочный синтаксис):

var Inventory = Backbone.Model.extend({
    foo: function() {
        this.constructor.foo();
    }
}, {
    foo: function() {
        alert('bar');
    }
});

var i = new Inventory({});
i.foo(); //This works!

var ExtendedInventory = Inventory.extend({});

var ei = new ExtendedInventory({});
ei.foo();
2 голосов
/ 29 июня 2011

Что не работает точно, в вашем примере? И в Firefox, и в IE я получаю два всплывающих окна с надписью «bar», что выглядит как ожидаемый результат? Кажется, что статическая часть также работает нормально, см. this jsfiddle .

(это с версией HEAD Backbone, кстати; не знаю, имеет ли это значение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...