javascript - Knockout Javascript select 返回 Object 对象

标签 javascript knockout.js

我使用 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/

相关文章:

javascript - 如何使用 Google 可视化 setSelection() 防止无限循环?

javascript - 仅单击元素的选项卡更改,并非所有元素都具有相同的类

javascript - 如何显示 0 和 1 onclick 相同的按钮?

html - Knockout.js:有条件地绑定(bind) div 的标题属性

javascript - 使用下拉菜单更改多个文本框

javascript - 带参数的 knockout 点击绑定(bind)

jquery - 宽度自动不更新与挖空文本绑定(bind)

javascript - .each() 和 eval() 的问题

javascript - 在javascript中使用多维数组渲染二维 map

javascript - 如何通过 Suitescript 2.0 在保存的搜索中应用多个过滤器?