Knockout.js绑定到dropdownlist
试图将数据绑定到下拉列表Knockout.js绑定到dropdownlist,knockout.js,Knockout.js,试图将数据绑定到下拉列表 function EmailTemplate(data) { var self = this; self.etId = ko.observable(data.email_template_id); self.etTypeId = ko.observable(data.email_template_type_id); self.etTitle = ko.observable(data.email_te
function EmailTemplate(data) {
var self = this;
self.etId = ko.observable(data.email_template_id);
self.etTypeId = ko.observable(data.email_template_type_id);
self.etTitle = ko.observable(data.email_template_title);
self.etContent = ko.observable(data.email_template_content);
self.etAppYear = ko.observable(data.app_year);
self.etSubject = ko.observable(data.subject);
self.etActive = ko.observable(data.active);
}
function EmailTemplateViewModel() {
var self = this;
self.ETList = ko.observableArray();
var uri = '/admin/services/EmailTemplateService.svc/EmailTemplates';
OData.read(uri, function (data, response) {
$.each(data.results, function (index, item) {
self.ETList.push(new EmailTemplate(item));
});
});
}
$(document).ready(function () {
ko.applyBindings(new EmailTemplateViewModel());
});
HTML标记:
<select data-bind="options: ETList, value:etId, optionsText: 'etTitle' "class="dropdown"></select>
当我运行此程序时,我得到:
未捕获错误:无法分析绑定。
消息:ReferenceError:未定义etIdis;
绑定值:选项:ETList,值:etId,选项文本:'etTitle'
当我们绑定到下拉列表时,我们应该如何绑定该值?绑定之后,我们应该如何在Knockout中捕获或创建下拉更改事件 使用
选项时,值
绑定将确定选择了哪些选项,通常您会希望在viewmodel(例如selectedTemplate
)中设置一个可观察的选项。然后,该可观察对象将自动映射到可观察数组中的实际对象。设置value:etId
没有意义,因为根视图模型中没有etId
例如:
HTML:
您可能打算使用
选项value:“etId”
,这可能会起作用,但通常是一种不太可取的方法(因为可观察对象的值现在将设置为ID而不是实际对象)非常感谢@antishok!etId不在根viewmodel中,但etTitle也不在其中。在这种情况下,我应该如何将文本绑定到etTitle并将值绑定到etId,这样当我更改下拉选择时,我可以获得etId而不是etTitle?好的,我得到了,我可以说selectedTemplate()&&selectedTemplate().etId。所以selectedTemplate是绑定到选项的对象,但显示为文本的eTitle!!仍然不知道为什么我们需要先调用selectedTemplate(),然后使用&&,这是为了什么?在那里需要它,因为一开始没有选择的项,所以selectedTemplate()==未定义的
。这与执行以下操作相同:selectedTemplate()?selectedTemplate().etId:未定义
。如果没有这一点,我们将在尝试访问UnfineDiges上的.etId
时出错!非常感谢你的解释。我还有另一个问题,dropdownlist实际上是一个触发器,一旦选中更改,然后订阅selectedTemplate来调用ajax来拉回数据,对于初始加载,这很好,我绑定到一个类似self.ETList的ObservalArray,但是每次dropdown更改选择并拉回数据时,我应该如何清理这个ObservalArray,现在需要继续添加,如果我指定self.ETList=[];在ajax回调之后但在数据绑定之前,我没有得到任何东西。。。
function EmailTemplateViewModel() {
var self = this;
self.ETList = ko.observableArray();
self.selectedTemplate = ko.observable();
// ...
}
<select data-bind="options: ETList, value:selectedTemplate, optionsText: 'etTitle'" class="dropdown"></select>