Где я должен помещать связанные с представлением константы - backbone.js

Представьте, что у меня есть представление, и как часть представления он отображает объекты модели "x" и "x". Вопрос, где мне целесообразно поставить эту точку зрения постоянной?

Мое предположение было бы сделать что-то вроде этого:

myApp.MyView = Backbone.View.extend({
    ...
    myConstant: 10,
    ...
    render: function(){
        ...
        //some code that uses myConstant
        ...
    }
});

Это имеет смысл?

Любые предложения помогают!

Ответы

Ответ 1

Похоже, что вы хотите назначить свойство класса для представления. Вы можете передать второй хэш в свой расширенный вызов, чтобы сделать это. Ваш код будет выглядеть примерно так:

myApp.MyView = Backbone.View.extend({

    render: function() {
        alert(myApp.MyView.myConstant);
    }

}, {

    myConstant: 10

});

где ваша константа доступна как myApp.MyView.myConstant.

Ответ 2

Ты очень близко! Фактически вы просто используете this.myConstant. Вот рабочий пример...

testView = Backbone.View.extend({
    test: "hello world!",

    initialize: function(){
        alert( this.test );
        _.bindAll(this, "render");
    },

    render: function(){
        //do your rendering...
        return this;
    }
});
var view = new testView();

Ответ 3

Как и выше, я согласен с (и подтвержденным) принятым ответом, однако для ясности я был бы склонен идти в таком формате:

myApp.MyView = Backbone.View.extend({
    render: function() {
        alert(myApp.MyView);
    }
});

_.extend(myApp.MyView.prototype, {
  enum : {
      //...
  }
});

Причина в том, что у вас может быть много миксинов для вашего вида, и я вижу, что видимость становится размытой, когда вы просто добавляете объект после объекта в View.extend. По крайней мере, таким образом вы можете разбить его и поместить комментарии между вашими миксинами. Это также имеет смысл, если вы используете RequireJS и загружаете в общий набор enums/mixins.

Ответ 4

Не инициализируйте константы представления под расширением, он будет вести себя как статическая константа для всех ваших экземпляров представления. Вместо этого используйте конструктор:

constructor: function()
{
     Backbone.View.prototype.constructor.apply(this, arguments);
     this.myConstant = 10;
     this.myOtherConstant = {};
}

больше объяснений здесь