Использование Backbone.js и jquery.datalink.js
Можно ли использовать Backbone.js
а также jquery.datalink.js
вместе, чтобы связать модель Backbone с набором полей, и если да, то как?
Например, учитывая:
<div id="person">
<label for="name">Name:</label>
<input type="text" name="name" id="name" />
</id>
а также
var m = Backbone.Model.extend({});
Кажется, имеет смысл (но не работает), что можно:
$("#person").link(m);
Под "не работает" я подразумеваю, что когда я меняю модель, ссылка не обновляет поля ввода. Когда я изменяю поля ввода, модель не обновляется.
Я возился с этим на jsFiddle, но безрезультатно. Действительно, похоже, что плагин для передачи данных на самом деле не работает так, как задокументировано (если я не сделал ошибку).
Если канал данных не подходит для этого, я буду признателен за альтернативные варианты.
Буду благодарен за мысли и отзывы.
2 ответа
Я не использовал плагин Datalink, но это может помочь...
Этот вид нарушает принцип инкапсуляции, но вы можете использовать model.attributes
объект внутри модели Backbone.
Так что может быть что-то вроде этого:
$("#person").link(m.attributes);
Кроме того, когда вы создаете экземпляр Backbone.Model, он выглядит так:
var m = new Backbone.Model();
Когда вы звоните Backbone.Model.extend
вы фактически создаете новый конструктор (например, новый класс), а не экземпляр объекта.
Ожидается, что решение, предоставленное @Sam, будет работать, но оно связано с проблемами, о которых вы должны знать. Магистральные модели являются наблюдаемыми, т.е. Вы можете связать функции для изменения событий в моделях. Эти события запускаются функциями получения и установки оболочки, предоставляемыми Backbone. Если вы обойдете эти методы получения и установки с помощью непосредственного использования model.attributes, то события не будут вызваны при изменении данных. Таким образом, это не проблема, если ваша связь с данными является однонаправленной, т.е. когда объект javascript изменяется, то вид меняется, но если вы хотите реализовать двунаправленное связывание данных, вы столкнетесь с проблемами, потому что, когда пользователь манипулирует видом, атрибуты модели изменяются, но соответствующие установщики не используется и, следовательно, остальная часть кода приложения не уведомляется об изменении. Это может привести к трудностям при отладке. Если вам важна привязка данных, загляните в KnockoutJS, который обладает самыми современными возможностями связывания данных.