Я пытаюсь вызвать функцию из моего ViewModel из события click. Похоже, что функция выходит за пределы области действия, когда я вызываю ее из цикла foreach. Новое для JavaScript и попытка обернуть голову тем, как/почему оказалось бесполезным.Сфера действия в ViewModel
Функция:
$dyn.controls.Test = function (props, element) {
var self = this;
$dyn.ui.Control.apply(this, arguments);
$dyn.ui.applyDefaults(this, props, $dyn.ui.defaults.Test);
self.RowItem = [
{
.
.
.
}];
self.Periods = [
{ Label: "13:00", Open: true },
{ Label: "13:10", Open: true },
.
.
.
{ Label: "14:30", Open: true }];
self.clickedMe = function (action) { //This is the function I want to call
alert("Clicked");
};
.
.
.
В HTML это работает:
<div data-dyn-bind="foreach: $data.RowItem" class="table" id="workspace">
<div class="row">
<div class="resourceCell" data-dyn-bind="attr: {id: $data.Id}">
<div data-dyn-bind="text: $data.Id" class="resourceCell_inner"></div>
</div>
<div class="periodRow" data-dyn-bind="foreach: $parent(0).Periods, click: function(event) {$parent(0).clickedMe(event);}">
<div class="periodCell"></div>
</div>
</div>
</div>
и это не делает:
<div data-dyn-bind="foreach: $data.RowItem" class="table" id="workspace">
<div class="row">
<div class="resourceCell" data-dyn-bind="attr: {id: $data.Id}">
<div data-dyn-bind="text: $data.Id" class="resourceCell_inner"></div>
</div>
<div class="periodRow" data-dyn-bind="foreach: $parent(0).Periods">
<div class="periodCell" data-dyn-bind="click: function(event) {$parent(0).clickedMe(event);}"></div>
</div>
</div>
</div>
Однако я явно хочу, чтобы моя функция вызываемая из «cell» divs, а не строка. Любой совет? не
Я пробовал это раньше (и теперь снова), но $ root все равно не дает мне доступ к функции. –
@ Weezul-HiGHSoftware Есть ли ошибки в консоли? – haim770
Да, такая же ошибка: «TypeError: Object не поддерживает свойство или метод« clickedMe »при щелчке (код функции: 17: 48)« Должен добавить, я пробую это в Dynamics AX, и я начинаю подозревать что реализация Microsoft может немного отличаться от того, на что она предназначена, поскольку я считаю, что ваше предложение будет правильным ответом (отметит это как таковое). Однако я не получаю ошибки в $ root и не могу себе представить, что они не будут использовать стандартные библиотеки. –