/ / Czy potrafisz pisać czyste wyrażenia JavaScript w widokach Kendo MVVM (jak w Knockout)? - javascript, mvvm, knockout.js, kendo-ui

Czy możesz pisać czyste wyrażenia JavaScript w widokach Kendo MVVM (jak w Knockout)? - javascript, mvvm, knockout.js, kendo-ui

Poniżej, isDirty zwraca wartość logiczną, w zależności od tego, czy użytkownik zmienił którąkolwiek z obserwowalnych właściwości.

HTML

<div class="status-message" data-bind="text:isDirty ? user.nickName : user.suffix>

JS

viewModel = new kendo.observable({
user: {
emailAddress: user.emailAddress,
firstName: user.firstName,
middleInitial: user.middleInitial,
lastName: user.lastName,
title: user.title,
suffix: user.suffix,
nickName: user.nickName
}
});

Zrobiłem to z Knockoutem, ale z jakiegoś powodu nie mogę tego zrobić z MVVM Kendo.

Czy to tylko ograniczenie Kendo?

Odpowiedzi:

1 dla odpowiedzi № 1

Nie można używać JS w data-bind, ale istnieją inne sposoby osiągnięcia tego, co chcesz zrobić. Jednym ze sposobów byłoby utworzenie dwóch div-komunikatów o statusie i użycie visible wiążące oba. Innym sposobem byłoby użycie metody, aby uzyskać wyświetlanie danych.

HTML:

<div id="bindme">
<!-- alternative #1 -->
<input type="text" data-bind="value: user.emailAddress" />
<div data-bind="visible: isDirty">
<div class="status-message" data-bind="text: user.nickName"></div>
</div>
<div data-bind="invisible: isDirty">
<div class="status-message" data-bind="text: user.suffix"></div>
</div>

<!-- alternative #2 -->
<div class="status-message" data-bind="text: currentValue"></div>
</div>

JS:

viewModel = new kendo.observable({
isDirty: false,
user: {
emailAddress: "a",
firstName: "b",
middleInitial: "c",
lastName: "d",
title: "e",
suffix: "f",
nickName: "g"
},
currentValue: function () {
return this.get("isDirty") ? this.get("user.nickName") : this.get("user.suffix")
}
});

viewModel.bind("change", function () {
this.set("isDirty", true);
});

kendo.bind($("#bindme"), viewModel);

(próbny)