【问题标题】:KnockoutJS - observable object is undefined?KnockoutJS - 可观察对象未定义?
【发布时间】:2013-03-21 00:50:24
【问题描述】:

我还是 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"}

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

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

或,

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

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

【问题讨论】:

    标签: knockout.js knockout-mapping-plugin


    【解决方案1】:

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

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

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

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

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

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

    Example.

    【讨论】:

    • 试过这个。仍然得到undefined 错误文本应该在哪里。这是因为 $root.errors['myerror1'] === undefined 正在返回 true?
    • @user1077213 显然,在表达式中使用值时,您必须显式获取其值(使用errors())。起初我没有注意到这一点。查看更新的答案。
    • 哇,这真是太棒了!谢谢!
    猜你喜欢
    • 2017-11-25
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 2012-06-13
    • 2015-09-18
    • 2018-03-27
    • 2017-06-16
    相关资源
    最近更新 更多