Backbone stickit - привязка с использованием имен классов и квалифицированного "this"

Я часто предоставляю какое-то соглашение об именах для stickit цель jQuery IDс, в форме some-aggregate-individual-element-{#number} спаривание каждого ID с соответствующим элементом коллекции один на один. Это для того, чтобы stickit будет обновлять только частное View речь, а не другие аналогичные совокупные представления.

Кажется, должен быть способ использовать, скажем, имена классов, а не IDс этой целью, если бы вы могли как-то сказать stickit "корневой" узел для выполнения обновлений. Например, если я определяю View и я говорю bindings: { ".individual-title": { observe: "Title" } }, stickit знает, что Title атрибут исходит от this.model поэтому нет необходимости в квалификации. Однако всякий раз, когда я применяю ту же логику к левой стороне, stickit выполняет обновления для ВСЕХ узлов документа с этим именем класса, а не только для тех узлов, которые находятся под this.$el, где $el это корневой узел моего взгляда.

Есть ли встроенный или простой способ добиться этого, чтобы я мог остановить idвсе мои элементы с глупыми соглашениями об именах? Или это то, что вы должны делать?

1 ответ

На самом деле я связываю атрибут name с элементом формы, поэтому исключаю использование идентификаторов и имен классов. Например, скажем, у меня есть следующая модель.

User.Model = Backbone.Model.extend({
    defaults: {
        firstname: null,
        lastname: null,
        phone: null,
        personemail: null
    }
});

Затем я создаю следующих помощников:

// Create default binding therefore eliminating repetition
Backbone.View.prototype.createDefaultBindings = function() {
    var k, v, _ref, _results;
    this._bindings = {};
    _ref = this.model.toJSON();
    _results = [];
    for (k in _ref) {
        v = _ref[k];
        _results.push(this._bindings['input[name="' + k +'"]'] = { observe: k });
    }
    return _results;
};

// Helper to overide bindings in our view
Backbone.View.prototype.mergeBindings = function() {
    if (this.model) {
        this.createDefaultBindings();
    }
    _.extend(this._bindings, this.bindings);
    this.bindings = this._bindings;
};

Тогда мы можем иметь следующий вид:

User.Views.Form = Backbone.View.extend({
    initialize: function(options) {
        this.mergeBindings();
    },

    render: function() {
        this.stickit();
    }
});

Инициализировать наш взгляд

var view = new User.Views.Form({ model: new User.Model() })

Затем он будет привязан к вашему шаблону с помощью следующих входных данных:

<input name="firstname" type="text">
<input name="lastname" type="text">
<input name="phone" type="text">
<input name="email" type="text">
Другие вопросы по тегам