Основные примеры привязки данных - PullRequest
3 голосов
/ 09 сентября 2010

Я реализую базовый фреймворк в JavaScript, который просто обеспечивает привязку данных между объектами.Привязка данных может быть односторонней или двусторонней, и потенциально может иметь несколько объектов, связанных с некоторым свойством.Существует несколько решений для привязки данных, доступных на разных языках, и я пытаюсь составить представление о лучшем из всех миров, чтобы выбрать набор функций.До сих пор я исследовал следующие структуры, которые обеспечивают привязки:

Пожалуйста, не стесняйтесь редактировать вопрос и добавлять дополнительные каркасы, которые поддерживают связывание, если они отсутствуют.

Какие функции связывания данных вы считаете чрезвычайно ценными в выбранной вами платформе?Целью этой структуры будет устранение как можно большего количества клейкого кода.Кроме того, есть ли какие-либо исследовательские работы по этой теме, на которые я могу пожаловаться?

1 Ответ

1 голос
/ 09 сентября 2010

Также посмотрите на один из самых старых из них: инструментарий Tk (обычно связанный с tcl, но также доступный на других языках).В Tk обновление значения в графическом интерфейсе обычно выполняется простым обновлением переменной:

set foo "Hello" ;# just a simple variable

# Create a label widget displaying "Hello"
pack [label .l -textvariable foo]

# Now change "Hello" to "Goodbye"
set foo "Goodbye"

Или, например, 10-секундный виджет обратного отсчета:

set countdown 10
pack [label .count -textvariable countdown]

proc tick {} {
    incr countdown -1
    if {$countdown > 0} {
        after 1000 tick
    }
}
tick

На самом деле,Функция получена из самого языка tcl с помощью команды трассировки:

# A simple auto-incrementing variable:

set foo 0
proc autoIncrement {varname args} {
    incr $varname
}
trace add variable foo read {autoIncrement foo}

# now every time foo is read it increments itself by 1

Конечно, вы не можете ожидать, что все языки будут иметь эту функцию.Однако вы можете эмулировать его, опрашивая, возможно, используя setInterval().То, как Tk делает это, кажется мне наиболее естественным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...