2013-02-13 83 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