2013-02-13 82 views
1

我使用jQuery的1.9.0和jQuery-UI-1.10.0与继承的对象paramater

var opts = { 
      source: availableTags 
     }; 

    var optsA = Object.create(opts, 
    { 
     select: { 
      value: function (event, ui) {} 
     } 
    }); 

    var optsB = Object.create(opts, 
    { 
     select: { 
      value: function (event, ui) {} 
     } 
    }); 

    $("#tags1").autocomplete(
     optsB 
    ); 

    $("#tags2").autocomplete(
     optsA 
    ); 

我试图建立两个单独的参数列出了我的jQuery的自动完成自动完成。这些对象似乎构造正确,但自动完成似乎并不能识别我对继承对象中的select的定义。

+1

它看起来非常奇怪。如果你添加选择方法:optsA .__ proto__它的作品,但如果你将它添加到对象,它不会... – 2013-02-13 17:06:25

+0

我在想你所发布的绑定选项可能是一个更好的方法来解决这个问题,而不是尝试使用经典的OO概念。 – Jonathan 2013-02-13 17:10:56

+0

显然我只是分享一点我的代码,这实际上是一个更大的参数列表,因此我自己的模块化的坚持。 – Jonathan 2013-02-13 17:17:08

回答

1

Object.create调用中缺少一个属性。

您应该添加enumerable: true

var opts = { 
    source: availableTags 
}; 

var optsA = Object.create(opts, 
{ 
    select: { 
     value: function (event, ui) {}, 
     enumerable: true 
    } 
}); 

var optsB = Object.create(opts, 
{ 
    select: { 
     value: function (event, ui) {}, 
     enumerable: true 
    } 
}); 

$("#tags1").autocomplete(
    optsB 
); 

$("#tags2").autocomplete(
    optsA 
); 

的问题是,在jQuery中的核心extend方法循环找不到select属性,因为它没有被标记为enumerable所以这就是为什么它是从内部无法访问autocomplete

JSFiddle

+0

我似乎无法得到这个工作。这对我来说似乎是正确的,但它不工作,有什么想法?我该如何解决这个问题。非常感谢您的帮助! – Jonathan 2013-02-14 09:56:07

+1

给我几分钟发布你的jsfiddle例子。 – 2013-02-14 10:00:37

+1

这里是示例http://jsfiddle.net/EBduF/308/ – 2013-02-14 10:31:08