Rivetjs Глобальный обработчик события onchange
Я стараюсь изо всех сил, чтобы справиться с заклепками, но мне нужно сделать что-то, что должно быть простым, и я не совсем уверен, как это сделать.
Сценарий моего случая прост: у меня есть этот набор данных, и всякий раз, когда происходит изменение в "строках" или "строках", мне нужно сразу отправить эти изменения на сервер.
Похоже, это обычная картина для меня, но я не могу сделать это без обмана.
Это мое решение до сих пор:
var data = {
rows: [
{name: 'John', age: 30},
{name: 'Mary', age: 29}
]
}
var self = this
, valRoutine = rivets.binders['value'].routine;
rivets.binders['value'].routine = function(el, value) {
var res = valRoutine.call(this, el, value);
self.doServerStuff(this.model);
return res;
};
Как сделать обработку событий в заклепках? События по умолчанию не определены? Я думаю, что "onModel[add|change|del]Event" должно быть в коробке, я что-то упустил? Наверное, да, но документы не сильно помогают, и найти примеры не так просто, так что... =/
Кто-нибудь может помочь в этом?
Ах, кстати, примеры того, как заставить компоненты работать, кто-нибудь? Это была одна из главных причин, по которой я наткнулся на заклепки.
Спасибо!!!
1 ответ
Хорошо, нашел гораздо лучший способ:
rivets.binders['update'] = {
bind: function(el) {
var self = this
, field = this.keypath
;
this.callback = function() {
var page = self.observer.obj;
if (page.data.main.status == 'editing') {
var data = {row:{}};
data[page.key] = page.data.main.row[page.key];
data.row[field] = page.data.main.row[field];
page.exec('update', {
data: data
}, this);
}
};
$(el).on('change', this.callback);
},
unbind: function(el) {
$(el).off('change', this.callback);
},
routine: function(el, value) {
}
};
А потом просто:
<input rv-update="my_field" rv-value="data.row.my_field">
Я понял, что если я поймаю обновление таким, каким я был, то при каждом нажатии клавиши он будет вызывать сервер.