查看可观察的所有扩展器和自定义绑定

时间:2013-06-12 22:37:40

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

是否可以在Knockout JS中看到附加到observable的所有扩展器和绑定?

示例视图模型:

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});

}

除了Knockout X-Editable Plugin

之外,我还使用了几个自定义bindingHandler,包括KO Validation Plugin

多页面视图示例:

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

   ....

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

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

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

B中。是否有另一个查询可以运行以获取依赖于此可观察对象的所有绑定处理程序?这可以作为DOM元素返回吗?

基本上我正在尝试显示导入数据的验证错误,但如果我在第二个视图中,我想在<span data-bind="editable"/>下面附加它们。

在单独验证每个输入时这很简单,但在使用ko.validation.group(viewModel)时会变得复杂。即使我迭代每一个错误,我也没有看到我如何将它们与抛出错误的原始observable联系起来。

1 个答案:

答案 0 :(得分:1)

您可以使用自定义绑定

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

如果这还不够,那么你必须要有创意:D

没有通用的方法来查看可观察的所有扩展器。 KO验证为扩展的observable添加了一些函数和observable,你可以使用

  • clearError
  • 错误
  • 的isValid
  • isValidating
  • 规则
  • SETERROR

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

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