【发布时间】:2016-07-14 03:27:56
【问题描述】:
我正在尝试使用模板实现内联编辑。在我的视图模型上,我有一个方法:self.changeMode。我是从按钮单击事件(在模板内)触发的。传递给 changeMode 函数的 data 参数包含的是预期数据,但我需要更改 observable。我该怎么做?
var MyViewModel = function (data) {
var self = this;
self.managingAgentId = ko.observable(data.managingAgentId);
self.companyName = ko.observable(data.companyName);
self.companyNumber = ko.observable(data.companyNumber);
self.isActive = ko.observable(data.isActive);
self.agents = ko.observableArray(data.agents);
// Change to Edit or Display mode
self.changeMode = function (data,event) {
event.preventDefault();
// => need to change mode here!
};
}
$(function () {
$.ajax({
type: "GET",
url: ma.Urls.LoadManagingAgent
}).done(function (result) {
$.each(result.agents, function (index, element) {
element.mode = "display";
});
ko.applyBindings(new MyViewModel(result));
}).error(function (response) {
addMessage(response);
});
});
<script type="text/html" id="display">
<td data-bind="text: managingAgentMemberId"></td>
<td data-bind="text: applicationUser.userName"></td>
<td data-bind="text: applicationUser.email"></td>
<td data-bind="text: applicationUser.emailConfirmed"></td>
<td data-bind="text: isActive"></td>
<td>
<button class="btn btn-success btn-sm" data-bind="click:$root.changeMode">
<i class="fa fa-edit"></i>
Edit
</button>
</td>
</script>
<script type="text/html" id="edit">
<td data-bind="text: managingAgentMemberId"></td>
<td data-bind="text: applicationUser.userName"></td>
<td data-bind="text: applicationUser.email"></td>
<td data-bind="text: applicationUser.emailConfirmed"></td>
<td><input type="checkbox" data-bind="checked: isActive" /> </td>
<td>
<button class="btn btn-success btn-sm kout-update">
<i class="fa fa-save"></i>
Update
</button>
<button class="btn btn-danger btn-sm kout-cancel">
<i class="fa fa-stop"></i>
Cancel
</button>
</td>
</script>
【问题讨论】:
-
不确定我理解你的意思。正在返回的 ajax 上调用 applyBindings?
-
我在写完评论大约 5 秒后删除了评论,在您看到删除之前似乎有一些延迟。
-
你想把
mode改成什么?此外,mode在您的视图模型中甚至不是可观察的。 -
我有 2 个值被传递给模板 - 编辑和显示。因此,当单击按钮(在代理行上)时,我想将“显示”值更改为“编辑”,这有望将行更改为使用编辑模板。还有一个名为“edit”的模板
-
OK - 所以设置 observableArray([data.agents]) 不使用 Ajax 调用后设置的“mode”属性?那么,如何将其作为新属性添加到每个代理上?
标签: knockout.js knockout-2.0 knockout-mapping-plugin knockout-mvc