Где я должен поставить представление связанных констант - backbone.js - PullRequest
14 голосов
/ 26 мая 2011

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

Я думаю, я бы сделал что-то вроде этого:

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

Имеет ли это смысл?

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

Ответы [ 4 ]

11 голосов
/ 27 мая 2011

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

myApp.MyView = Backbone.View.extend({

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

}, {

    myConstant: 10

});

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

5 голосов
/ 27 мая 2011

Ты очень близко! Вы на самом деле просто будете использовать 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();
1 голос
/ 20 июня 2014

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

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

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

1 голос
/ 10 декабря 2013

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

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

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

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

...