Knockout-привязка данных в функции

1

Привет, я попробовал что-то, но я не могу этого сделать.

HTML

<div data-bind="dxTextBox: { value:my_var }"></div>

JS

var viewModel = {
   my_var: ko.observable(''),
   StartScan:function()
    {
        mytimer = setInterval(this.DataBind, 1000);
    },
   DataBind:function()
    {
        this.my_var('hello world');
    },}return viewModel;

Если я использую это

<div data-bind="dxButton: { text: 'Start', onClick: DataBind}"></div>

Все в порядке. Это возвращает мне "привет мир"

Но если я использую это

<div data-bind="dxButton: { text: 'Start', onClick: StartScan}"></div>

Он возвращает мне ошибку, подобную этой → Ошибка: "Непринятый TypeError: this.my_var не является функцией",

Как я могу это решить?

Теги:
data-binding
knockout.js

1 ответ

1
Лучший ответ

Когда вы передаете ссылку на функцию, которую позже вызывается setInterval (или setTimeout), ее контекст будет глобальной областью (в данном случае это window). Следовательно, this.my_var, очевидно, вернется undefined.

Вам нужно явно bind его к правильному контексту (который является viewModel который его удерживает) с помощью .bind(this):

mytimer = setInterval(this.DataBind.bind(this), 1000);

См. MDN

Ещё вопросы

Сообщество Overcoder
Наверх
Меню