为什么我的viewModel更新为HTML而不是javascript?
我有一个函数,可以一次将行项目上移一行。为了简单起见,我展示了代码的一小部分。使用$root.cRecordID,我的observable在HTML中的显示与预期一致,但在我的代码中,它们是未定义的。这令人困惑和沮丧。有人能解释一下吗为什么我的viewModel更新为HTML而不是javascript?,javascript,knockout.js,viewmodel,Javascript,Knockout.js,Viewmodel,我有一个函数,可以一次将行项目上移一行。为了简单起见,我展示了代码的一小部分。使用$root.cRecordID,我的observable在HTML中的显示与预期一致,但在我的代码中,它们是未定义的。这令人困惑和沮丧。有人能解释一下吗 listOrderUp: function (lid) { // get RecordID of selected item //viewModel.loadItemByID(lid); console.log(lid); ODa
listOrderUp: function (lid) {
// get RecordID of selected item
//viewModel.loadItemByID(lid);
console.log(lid);
OData.read(_serviceURL + "/nsLineItems(" + lid + ")?", function (response) {
viewModel.cRecordID(response.RecordID);
viewModel.cMenuID(response.MenuID);
viewModel.cEntreeID(response.EntreeID);
viewModel.cCategoryID(response.CategoryID);
viewModel.cListOrder(response.ListOrder);
});
console.log(viewModel.cRecordID());
// selected item - decrease ListOrder by 1
var putdataCurrent = {
RecordID: viewModel.cRecordID(),
MenuID: viewModel.cMenuID(),
CategoryID: viewModel.cCategoryID(),
EntreeID: viewModel.cEntreeID(),
ListOrder: viewModel.cListOrder() - 1
};
console.log(putdataCurrent);
var _requestCurrent = {
requestUri: _serviceURL + "/nsLineItems(" + viewModel.cListOrder() + ")",
method: "MERGE",
data: putdataCurrent
};
OData.request(_requestCurrent, function (data) {
});
}
以下是控制台结果:
以下是我的html测试代码:
这将显示预期结果,但我需要代码中的结果,以便将数据保存到服务器。它怎么可以在代码(javascript文件)中未定义,但在html中正确显示?
谢谢,Jeff我想,
OData.read(…)
是对服务器的异步调用吗?如果是这样,我相信您在var putDataCurrent
中设置值的代码是在返回对服务器的调用之前执行的。如果在设置调用可观察对象的结果和设置putDataCurrent
的位置放置两个断点,并检查哪个断点最先被击中。如果这是问题所在,您可以将代码移动到OData.read的“success”回调中,或者您可以使用我通过将其余代码嵌入OData请求中获得了想要的结果:
listOrderUp: function (lid) {
OData.read(_serviceURL + "/nsLineItems(" + lid + ")?", function (response) {
viewModel.cRecordID(response.RecordID);
viewModel.cMenuID(response.MenuID);
viewModel.cEntreeID(response.EntreeID);
viewModel.cCategoryID(response.CategoryID);
viewModel.cListOrder(response.ListOrder);
// selected item - decrease ListOrder by 1
var putdataCurrent = {
RecordID: viewModel.cRecordID(),
MenuID: viewModel.cMenuID(),
CategoryID: viewModel.cCategoryID(),
EntreeID: viewModel.cEntreeID(),
ListOrder: viewModel.cListOrder() - 1
};
console.log(putdataCurrent);
var _requestCurrent = {
requestUri: _serviceURL + "/nsLineItems(" + lid + ")",
method: "MERGE",
data: putdataCurrent
};
OData.request(_requestCurrent, function (data) {
});
});
console.log(viewModel.cRecordID());
}