2012-01-12 9 views
5

Yuvalanmış bir düz eski javascript nesnesi kümem varsa (örneğin, JSON'dan döndürülmüşse), onları nasıl Ember.js nesnelerine yerleştiririm (veya en azından bağlama işlevselliğini çalışır duruma getirir)?Yuvalanmış düz js nesnelerini Ember.js nesnelerine nasıl dönüştürebilirsiniz?

var y = Ember.Object.create(x); 

Ardından "baz" değerini ayarlayarak herhangi güncellemek olmaz:

var x = { 
    bar: { 
    baz: "quux" 
    } 
} 

Sonra bir Kor nesnesine dönüfltürmeye: Ben gibi bir nesne varsa, örneğin

, Görünümler var, çünkü bu sadece bir normal js nesnesi, bir Ember nesnesi değil.

Sadece yinelemeli olarak nesne anahtarlarını gözden geçirebilirim ve Ember.Object.create'ı tamamıyla yapabilirim, ama alternatif bir yaklaşım var mı?

cevap

2

Ember.Object'u oluşturduktan sonra, baz değerini nasıl ayarlamayı denediğinizden emin değilim, ancak bir gözlemci duyarlı ayarlayıcı işlevini kullandığınızdan emin olmalısınız. Bu örnek için setPath() kullanmanızı öneririz. ayarladıktan sonra bir görünüm güncellemesi gösteren

var x = { 
    bar: { 
    baz: "quux" 
    } 
}; 
var y = Ember.Object.create(x); 
y.setPath('bar.baz', 'foo'); 

jsFiddle Örneğin,: Örneğin

http://jsfiddle.net/ebryn/kv3cU/

+0

Serin, bunu yapabileceğini bilmiyordum. Sanırım bu biraz daha karışıktır, çünkü o zaman 2 farklı erişim metodu kullanmalısınız – Roland

+0

Ne demek istediğini açıklayabilir misin? – ebryn

+0

Bazen standart js atamalarını kullanabilirsiniz, örn. Foo.bar = "a", ancak diğer zamanlarda setPath'i kullanmanız gerekir. (ENV.USE_ACCESSORS = true kullanıyorum, çünkü IE'yi umursamıyorum). – Roland

0

Ben bağımsız düzgün bilgisayarlı çalışmalarını sağlamak amacıyla iç içe nesneleri tanımlamak zorunda Nedense (hatta sayılanlar). Bunları 2 fayda fonksiyonlarını işçiliği sona Bunun için

:

import EmberObject from '@ember/object'; 
import { A } from '@ember/array'; 

function fromArrayToEmberArray(array) { 
    const emberArray = A(); 
    array.forEach(function(item) { 
     if (Array.isArray(item)) { 
      emberArray.push(fromArrayToEmberArray(item)); 
     } else if (item && typeof item === 'object') { 
      emberArray.push(fromObjectToEmberObject(item)); 
     } else { 
      emberArray.push(item); 
     } 
    }); 
    return emberArray; 
} 

function fromObjectToEmberObject(pojo) { 
    const emberObject = EmberObject.create(); 

    for (const key in pojo) { 
     const keyObject = pojo[key]; 
     if (Array.isArray(keyObject)) { 
      emberObject.set(key, fromArrayToEmberArray(keyObject)) 
     } else if (keyObject && typeof keyObject === 'object') { 
      emberObject.set(key, fromObjectToEmberObject(keyObject)) 
     } else { 
      emberObject.set(key, keyObject); 
     } 
    } 

    return emberObject; 
} 

export default {fromObjectToEmberObject};