2013-06-12 23 views
0

是否可以在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}); 

} 

我也使用多个自定义bindingHandlers包括除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.有没有办法,我可以运行得到所有需要这个观察到的绑定处理的另一个查询?这可以作为DOM元素返回吗?

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

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

回答

1

有一个自定义绑定,您可以使用

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

如果这还不够,那么你必须发挥创意:d

有看到对观察到的所有扩展没有通用的方法。 KO验证增加了一些功能,可观察到延长观察到的,你可以使用

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

你需要创建一个自定义绑定,以便能够查看所有绑定避开元素。这不是一件坏事,它从ViewModel对View的依赖关系是不好的做法。从您的自定义绑定初始化或更新功能,您有allBindingsAccessor

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

是啊,我知道关于validationMessage约束力,但我不知道是否有另一种方式,我只是抢消息,并操纵它自己,当与validatedObservable(验证组)一起工作。如果这返回一组错误,它们本身就是可观察的,那么是否有一个函数可以调用每个错误来查找父项? – lyma

+0

不,可悲的是,唯一知道视图模型结构的是绑定关系 – Anders

+0

好的。我可以解决它。谢谢。 – lyma