Где я должен помещать связанные с представлением константы - 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 = {};
}
больше объяснений здесь