【问题标题】:Knockout observablearray of observables with arrayMap function用 arrayMap 函数淘汰 observablearray 的 observables
【发布时间】:2017-09-26 06:26:23
【问题描述】:

我在创建 observable 的 observable 数组时遇到问题。我在谷歌上搜索但没有找到解决方案。这可能是一些我无法注意到的简单事情,因为我是 Knockout 的新手。 但我有模型:

eventsModel = function () {
   var self = this;

   self.endTimeInMinutes = ko.observable();
   self.events = ko.observableArray([]);
   self.startTripTime = ko.observable();
   self.endTripTime = ko.observable();
}

我想在我的数组中有一个可观察项,所以我编写了一个 ViewModel 并绑定了模型。

eventItemViewModel = function(o) {
    var self = this;

    self.BeginInMinutes = ko.observable(o.BeginInMinutes);
    self.Type = ko.observable(o.Type);
};

var events = new eventsModel();
ko.applyBindings(events);

我正在使用 AJAX 获取数据:

function GetEvents() {
    $.ajax({
        url: "Contact.aspx/GetEvents",
        async: true,
        type: "POST",
        contentType: "application/json",
        dataType: "json",
        success: function (data) {
            var temp = data.d;
            endTimeInMinutes = temp["EndInMinutes"];
            eventsArr = temp["Events"];
            eventsArray = JSON.parse(JSON.stringify(eventsArr));
            events.events(eventsArray);
        },
    });
}

在这之后我有一个可观察的数组,但里面没有可观察的值。现在我尝试添加我的 AJAX 方法:

events.events(ko.utils.arrayMap(eventsArray, function(eve) {return new eventItemViewModel(eve); }));

但是如果我对此执行console.log,那么我将得到对象数组,并且在每个对象中都有一个BeginInMinutes 和类型,但它的值类似于function d()... etc

我真的被它困住了,我相信我在某个地方犯了一些非常简单的错误。

谢谢你帮助我。

【问题讨论】:

  • 您到底想要什么,您希望observableArray 中的项目是observable 还是只是js object?我觉得这个问题不是很清楚
  • 顺便说一句,你得到function d()的结果证明你在observableArray中有一个observable对象。是你想要的吗??
  • 把你用于Console.log的代码,你必须调用那个函数来获取BeginInMinutes的数据
  • 好的,所以如果它是一个证据,那么问题可能是如何显示确切的数据而不是显示函数 d().... 在 console.log 中,数据位于 [[范围]] -> 闭包。所以也许我的问题是要显示这个正确的数据,如果你说它已经是 observableArray 的 observables。
  • 您可以通过以下命令BeginInMinutes()显示您的数据,只需在属性名称中添加括号即可。

标签: javascript knockout.js


【解决方案1】:

你已经有一个 observableArray 里面有 observable 元素,
你的问题真的是获取这些值
使用此代码获取数组中第一个元素的实际值。

console.log(events.events()[0].BeginInMinutes());

【讨论】:

    猜你喜欢
    • 2014-10-28
    • 2017-10-23
    • 2013-06-23
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多