Привет, я попробовал что-то, но я не могу этого сделать.
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 не является функцией",
Как я могу это решить?
Когда вы передаете ссылку на функцию, которую позже вызывается setInterval
(или setTimeout
), ее контекст будет глобальной областью (в данном случае это window
). Следовательно, this.my_var
, очевидно, вернется undefined
.
Вам нужно явно bind
его к правильному контексту (который является viewModel
который его удерживает) с помощью .bind(this)
:
mytimer = setInterval(this.DataBind.bind(this), 1000);
См. MDN