2

我还是 Knockout 的新手,所以我希望有人能够帮助我解决这个问题。

这是我的视图模型:

baseModel = {
    logged_in : ko.observable(),
    alerts : ko.observableArray(),
    errors: ko.observable()
};

在我的 HTML 中,我有:

<span data-bind="text: ($root.errors['myerror1'] === undefined)? 'undefined':$root.errors['myerror1']"></span>

我希望通过 AJAX 拉入任意对象并将其分配给我的 .errors 属性。例如,当我的回应是这样的:

Object {myerror1: "password is wrong", error2: "something else is wrong"}

我希望它span在我的 AJAX 成功回调中执行以下操作时显示错误:

if( response.errors !== undefined )
     baseModel.errors = ko.mapping.fromJS(response.errors, {}, baseModel.errors);

或者,

if( response.errors !== undefined )
     baseModel.errors = response.errors;

两者都没有显示myerror1我在 HTML 中绑定的内容。我可能在这里做错了很多事情。我不确定出了什么问题。谢谢!

4

1 回答 1

1

如果您尝试errors使用新值更新 observable,则不应使用 设置它=,而是将新值作为参数传递给它:

baseModel.errors({myerror1: "password is wrong", error2: "something else is wrong"});

更新:我发现您的代码有两个额外的问题:

  1. errors开始为undefined; 最好将其设置为空对象,这样在首次评估绑定时不会出现错误:

    errors: ko.observable({})
    
  2. 如果您想要errorsin 表达式中的值data-bind,您应该“调用”它以获取它的值 - 而不是直接使用它:

    <span data-bind="text: ($root.errors()['myerror1'] === undefined)?
    'undefined':$root.errors()['myerror1']"></span>
    

例子

于 2013-03-21T00:56:05.363 回答