Rivets.js (2-way binding)

Применяется для двустороннего маппинга javascript ajax(json) response на поля формы. Содержит дополнительную привязку к Sightglass для поддержки Observable.

<p>First Name: <input type="text" rv-value="model:firstName"></p>
<p>Last Name: <input type="text" rv-value="model:lastName"></p>
<p>Full Name: <span rv-text="view.fullName < model:firstName model:lastName"></span></p>
// Adapter
rivets.adapters[':'] = {
    observe: function(obj, keypath, callback) {
        obj.on('change:' + keypath, callback)
    },
    unobserve: function(obj, keypath, callback) {
        obj.off('change:' + keypath, callback)
    },
    get: function(obj, keypath) {
        return obj.get(keypath)
    },
    set: function(obj, keypath, value) {
        obj.set(keypath, value)
    }
};
 
var RivetsView = Backbone.View.extend({
    template: $("script[type='text/template']").html(),
    fullName: function() {
        return this.model.get("firstName") + " " + this.model.get("lastName");
    },
    render: function () {
        this.$el.html(this.template);
        rivets.bind(this.$el, { model: this.model, view: this });
        return this;
    }
});
 
var model = new Backbone.Model({firstName: "Luke", lastName: "Skywalker"}),
    view = new RivetsView({model: model, el: $("#container")});
 
view.render();