我在我的很多项目中都使用了淘汰赛,但是没有将它用作添加记录的初始形式(我已经广泛使用它来创建UI请求的记录,并且效果很好)。如果我通过按钮点击加载一组默认值(在文档加载后),那么一切都很好。如果我尝试在加载时初始化表单,则无法将默认值分配给select
。
<select data-bind="options: statusList, optionsText: function(item){ return item.Status() }, optionsValue: 'Id', value: actualRequest().StatusId"></select>
数据库表中提供了 statusList
,请求对象也是使用Breezejs调用创建的数据库对象。我正在初始化值,其中大部分初始化很好(如datepickers和输入默认值),但这些select
元素并没有初始化我认为应该的方式。
从我的视图模型中选择一个适当的选择:
var em = new breeze.EntityManager(serviceAddress);
function fetchMetaData() {
if (em.metadataStore.isEmpty()) {
return em.fetchMetadata();
}
return Q.resolve();
};
var load = function () {
fetchMetaData().done(function () {
em.executeQuery(breeze.EntityQuery.from('Statuses'))
.then(function (data) { statusList(data.results); })
.fail(function (error) { logger.error(error.message, "loadStatuses failed during initialization"); });
// A couple more data calls for other data fills
setupCreateNew();
});
};
var setupCreateNew = function() {
actualRequest(em.createEntity('Submittal', { id: breeze.core.getUuid() }));
actualRequest().StatusId(2); // 2 is the default value we want
// more initialization defaults
};
var actualRequest = new ko.observable('');
var statusList = new ko.observable([]);
由
初始化app.manageSubmittalRequestViewModel.load();
ko.applyBindings(app.manageSubmittalRequestViewModel, document.getElementById('manageSubmittalRequestId'));
行为是这样的,页面初始化,actualRequest().StatusId()
为2,当页面已applyBindings
完成时,actualRequest().StatusId()
的值已更改为1。使用select
元素会将值更改为正确的值,这一切都可以正常工作。我将value:
属性更改为本地(非初始化)的挖空变量,该变量在声明期间也被初始化为2,这也会在绑定时重置为1。
这是我做错了吗?我如何弄清楚重置的是什么?我在视图中搜索了可能具有相似名称的任何内容......没有!
附加修复
修复程序正在将初始化更改为:
var load = function () {
fetchMetaData().done(function () {
em.executeQuery(breeze.EntityQuery.from('Statuses'))
.then(function (data) { statusList(data.results); })
.fail(function (error) { logger.error(error.message, "loadStatuses failed during initialization"); })
.done( function () { setupCreateNew(); });
});
};
答案 0 :(得分:1)
最佳猜测是时间问题。在致电statusList
之前,您还没有等待初始化setupCreateNew
。你可以尝试做一些事情,比如
em.executeQuery(breeze.EntityQuery.from('Statuses'))
.then(function (data) { statusList(data.results); })
.then(function() { setupCreateNew(); })
.fail(function (error) { logger.error(error.message, "loadStatuses failed during initialization"); });
看看是否有帮助。