2010-09-20 177 views
0

說我有一個Form對象,它有一個Tab對象數組。jquery擴展 - 對象數組

var Tab = function (options) { 
    return ($jQuery.extend(true, { 
     id: 'foo', 
     title: 'Foo' 
    }, options)); 
} 

var Form = function (options) { 
    return ($jQuery.extend(true, { 
     id: 'foo', 
     tabs: [new Tab()] 
    }, options)); 
} 

我可以用這個:

var myForm = new Form({tabs: [new Tab({id: 'bar'}), new Tab({title: 'Bar'}), new Tab({id: 'bar', title: 'Bar'})]}); 

要獲取:

myForm.tabs[0] => {id: 'bar', title: 'foo'} 
myForm.tabs[1] => {id: 'foo', title: 'Bar'} 
myForm.tabs[2] => {id: 'bar', title: 'Bar'} 

但是,它可能以某種方式做到這一點:

var myForm = new Form({tabs: [{id: 'bar'}, {title: 'Bar'}, {id: 'bar', title: 'Bar'}]}); 

,並得到相同的結果?

回答

0

您可以循環選項卡並檢查它們是否爲Tab對象,例如, (未經測試):

var Form = function (options) { 
    if(options && options.tabs) { 
     var tabs = options.tabs; 
     for(var i = 0, l = tabs.length; i < l; ++i) { 
      if(!(tabs[i] instanceof Tab)) { 
       tabs[i] = new Tab(tabs[i]); 
      } 
     } 
    } 

    return ($jQuery.extend(true, { 
     id: 'foo', 
     tabs: [new Tab()] 
    }, options)); 
} 

參考:instanceof

+1

感謝。我希望有一個簡單的方法可以做到這一點,而無需編寫額外的代碼來處理它。這將完成這項工作。再次感謝! – Brett 2010-09-20 06:12:06