【问题标题】:Knockout mapping data from ajax post vs Static data来自 ajax 帖子与静态数据的淘汰赛映射数据
【发布时间】:2013-12-18 20:07:10
【问题描述】:

我遇到了一个关于 Ko 映射的奇怪问题。 我使用这段代码:

var PList = [{ "Region": { "RegionName": "SomeRegion" }, "CDetails": {}, "Category": { "Name": "SomeCategory" }, "PSource": 1, "PDate": "0001-01-01T00:00:00"}];

var PViewModel = ko.mapping.fromJS(search('someSearch', 'True'));
var PViewModel2 = ko.mapping.fromJS(PostList);

function search(queryString, isFirst) {
    $.ajax({
        type: 'POST',
        url: 'url',
        data: { 'searchQuery': queryString },
        dataType: 'json',
        success: function (dt) {
            if (isFirst != 'True') {
                ko.mapping.fromJS(dt, PostsViewModel);
            }
            return dt;
        }
    });
};

奇怪的是,我看到了 2 个结果:

  1. 当我转到 PViewModel(由 ajax 填充的那个)时,我看到它为 undefined
  2. 当我转到 PViewModel2(具有静态数据的那个)时,我可以看到预期的对象

*PViewModel2的静态数据只是ajax post返回的数据的一个副本。

我的问题是:

  1. 有人知道为什么会这样吗?以及如何解决?
  2. 此外,if (isFirst != 'True') 子句是初始化 ko 视图模型的正确方法吗?

【问题讨论】:

  • 你的问题不清楚
  • 包含更多脚本,以便我们查看模型结构和绑定

标签: javascript jquery ajax knockout.js knockout-mapping-plugin


【解决方案1】:

您正在处理异步操作(Ajax 请求)。 这些操作没有返回值。因此,这永远不会起作用:

ko.mapping.fromJS(search('someSearch', 'True'));

这就是success 回调的用途。传入的数据只能在那里处理。

function search(queryString, targetObservable) {
    $.ajax({
        type: 'POST',
        url: 'url',
        data: { 'searchQuery': queryString },
        dataType: 'json',
        success: function (dt) {
            ko.mapping.fromJS(dt, targetObservable);
        }
    });
};

search('someSearch', PostsViewModel);

【讨论】:

    猜你喜欢
    • 2013-07-21
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2015-05-28
    • 2013-01-24
    • 1970-01-01
    相关资源
    最近更新 更多