我使用 Knockout 进行选择,如下所示:
function journal(data) {
this.id = ko.observable(data.ID);
this.name = ko.observable(data.Name);
}
var self = this;
self.journals = ko.observableArray([]);
$.getJSON("/JournalEntries/GetJournalsList", function (data) {
var mappedJournals = $.map(data, function (item) { return new journal(item) });
self.journals(mappedJournals);
});
self.getData = function(journalid) {
alert(journalid);
};
HTML 部分是:
<select data-bind="options: $root.journals, optionsCaption: 'Choose...', value: 'id', optionsText: 'name', event:{ change: $root.getData }"></select>
它不会返回 ID,只是返回“[Object object]”
我做错了什么?
最佳答案
你通常不想在 knockout 中以这种方式对事件使用react。
如果您想对 <select>
中所选值的更改使用react,将所选值保存到可观察量(通过 value
绑定(bind))并订阅该可观察量(或该可观察量的基本计算值)。
function Journal(data) {
this.id = ko.observable(data.ID);
this.name = ko.observable(data.Name);
}
function ViewModel() {
var self = this;
// data
self.journals = ko.observableArray();
self.selectedJournal = ko.observable();
// subscriptions
self.selectedJournal.subscribe(function (journal) {
if (journal) alert( journal.id() );
});
// init
var newJournals = ko.utils.arrayMap([
{ID: 1, Name: "Item 1"},
{ID: 2, Name: "Item 2"},
{ID: 3, Name: "Item 3"},
{ID: 4, Name: "Item 4"},
], function(item) { return new Journal(item); });
self.journals(newJournals);
}
ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<select data-bind="
options: journals,
optionsCaption: 'Choose...',
optionsText: 'name',
value: selectedJournal
"></select>
<hr>
<pre data-bind="text: ko.toJSON($root, null, 2)"></pre>
关于javascript - Knockout Javascript select 返回 Object 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30513728/