Использование Backbone.js и jquery.datalink.js - PullRequest
0 голосов
/ 27 февраля 2011

Можно ли использовать 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 ]

1 голос
/ 18 июня 2011

Ожидается, что решение, предоставленное @Sam, будет работать, но оно связано с проблемами, о которых вы должны знать. Магистральные модели являются наблюдаемыми, т.е. Вы можете связать функции для изменения событий в моделях. Эти события инициируются функциями получения и установки упаковщика, предоставляемыми Backbone. Если вы обойдете эти методы получения и установки, используя непосредственное использование model.attributes, события не будут вызваны при изменении данных. Таким образом, это не проблема, если ваша связь с данными является однонаправленной, т.е. когда объект javascript изменяется, то вид меняется, но если вы хотите реализовать двунаправленное связывание данных, вы столкнетесь с проблемами, потому что, когда пользователь манипулирует видом, атрибуты модели изменяются, но соответствующие установщики не используется и, следовательно, остальная часть кода приложения не уведомляется об изменении. Это может привести к трудностям при отладке. Если ваша главная задача - привязка данных, загляните в KnockoutJS, который обладает самыми современными возможностями связывания данных.

1 голос
/ 03 мая 2011

Я не использовал плагин Datalink, но это может помочь ...

Этот тип нарушает принцип инкапсуляции, но вы можете использовать объект model.attributes внутри модели Backbone.

Так может быть что-то вроде этого:

$("#person").link(m.attributes);

Кроме того, когда вы создаете экземпляр Backbone.Model, это выглядит так:

var m = new Backbone.Model();

Когда вы звоните Backbone.Model.extendвы фактически создаете новый конструктор (например, новый класс), а не экземпляр объекта.

...