【问题标题】:see all extenders and custom bindings for observable查看 observable 的所有扩展程序和自定义绑定
【发布时间】:2013-06-09 05:13:18
【问题描述】:

是否可以在 Knockout JS 中查看附加到可观察对象的所有扩展程序和绑定?

示例视图模型:

var viewModel = function(){
  var self = this;

  self.firstName = ko.observable().extend({required: "Please enter a name",
                                           logChange: "first name" });

  self.lastName = ko.observable().extend({ required:true});

}

除了KO Validation Plugin之外,我还使用了几个自定义绑定处理程序,包括Knockout X-Editable Plugin

示例多页视图:

  <!--Screen 1 -->
  <input data-bind="value:firstName"/>

   ....

  <!--Screen 2 -->
  <span data-bind="editable:firstName"></span>

A.有没有办法查询self.firstName() 并获取所有扩展程序的列表?

{required: "Please enter a name", logChange: "first name" }

B.我可以运行另一个查询来获取依赖于这个 observable 的所有绑定处理程序吗?这可以作为 DOM 元素返回吗?

基本上我试图显示导入数据的验证错误,但如果我在第二个视图上,我想将它们附加到&lt;span data-bind="editable"/&gt; 下方。

单独验证每个输入时这很简单,但使用ko.validation.group(viewModel) 时就变得复杂了。即使我遍历每个错误,我也看不到如何将它们与引发错误的原始 observable 关联起来。

【问题讨论】:

    标签: knockout.js knockout-2.0 knockout-validation


    【解决方案1】:

    您可以使用自定义绑定

    <span data-bind="validationMessage: myObservable"></span>
    

    如果这还不够,那么你必须发挥创造力:D

    没有通用的方法可以查看 observable 上的所有扩展程序。 KO 验证为您可以使用的扩展可观察对象添加了一些函数和可观察对象

    • 清除错误
    • 错误
    • 有效
    • 正在验证
    • 规则
    • 设置错误

    您需要创建一个自定义绑定才能查看附加到元素的所有绑定。这不是一件坏事,从 ViewModel 依赖于 View 是不好的做法。从您的自定义绑定初始化或更新函数中,您有一个 allBindingsAccessor

    ko.bindingHandlers.myBinding = {
        init: function(element, accessor, allBindingsAccessor) {
           var valueAttachedToCheckedBinding = ko.utils.unwrapObservable(allBindingsAccessor().checked);
        }
    }
    

    【讨论】:

    • 是的,我知道validationMessage 绑定,但我想知道在使用validatedObservable(验证组)时是否有另一种方法可以让我自己获取消息并自己操作它。如果这返回一个错误数组,这些错误本身就是可观察的,是否有一个函数可以在每个错误上调用以查找父级?
    • 不,遗憾的是唯一知道视图模型结构的是 bindingcontext
    猜你喜欢
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2013-01-10
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    相关资源
    最近更新 更多