Tôi không thể tìm thấy bất kỳ cách nào để thực hiện nhiệm vụ chuyển đổi như vậy vì tôi không thể tìm thấy bất kỳ phương tiện nào để nhận các thuộc tính Ember.js cho đối tượng. Ember.keys
chỉ trả lại các thuộc tính tôi đã đặt trong create
hoặc với get
và các thuộc tính được khai báo trong Ember.extend
không hiển thị ở đó. Tôi sử dụng tài sản đó để thiết lập giá trị mặc định (ví dụ []
đối với tài sản mảng)Có cách nào để chuyển đổi đối tượng Ember thành đối tượng javascript đơn giản không?
Trả lời
Tại thời điểm này tôi giải quyết nó với đoạn mã sau:
App.plainCopy = function (obj) {
if (Ember.isArray(obj)) {
return obj.map(App.plainCopy);
} else if (typeof(obj) === "object") {
if (App.Plainable.detect(obj)) {
return obj.plainCopy();
} else {
throw new Error(Ember.String.fmt("%@ is not Plainable", [obj]));
}
} else {
return obj;
}
}
App.Plainable = Ember.Mixin.create({
plainCopy: function() {
var props = Ember.keys(this);
var proto = this.constructor.prototype;
for(p in proto) {
if (proto.hasOwnProperty(p) && typeof(this[p])!=="function") {
props.push(p);
}
}
var copy = {};
props.forEach(function(p) {
copy[p] = App.plainCopy(this.get(p));
}, this);
return copy;
}
});
Nó không đi lên hệ thống phân cấp lớp và không giống vào mixin (như tôi sử dụng cho các đối tượng dữ liệu có hình thức khá đơn giản mà quan điểm)
Tôi sẽ làm điều gì đó tương tự như người ở trên, nhưng tôi sẽ làm điều đó một chút khác nhau.
Mixin
App.NativeObject = Ember.Mixin.create({
toNative: function() {
var properties = [];
for (var key in this) {
if (jQuery.inArray(Ember.typeOf(object[key]), ['string', 'number', 'boolean']) !== -1) {
properties.push(key);
}
}
return this.getProperties(properties);
}
});
Object
Sau đó, bạn chỉ cần thực hiện các App.NativeObject
mixin trong đối tượng của bạn mà bạn muốn toNative
trên:
var Object = Ember.Object.extend(App.NativeObject, {
name: 'Adam',
count: 4
});
Sau đó chúng tôi có toNative
phương pháp trên tất cả các đối tượng thực hiện mixin của chúng tôi.
buộc jsFiddle: http://jsfiddle.net/jumUx/
giải pháp của bạn không đệ quy mặc dù – Qrilka
Tuy nhiên, đó là một bước nhỏ từ đó để làm cho nó trở nên đệ quy. – Wildhoney
yep, nhưng hãy nhìn vào ngã ba này của fiddle của bạn - http://jsfiddle.net/C2Rdn/: nếu bạn tạo một lớp, "NativeObject" sẽ bao gồm các thuộc tính bổ sung như 'isDestroyed' vv – Qrilka
Một giải pháp khả thi có thể phù hợp với nhu cầu của bạn trong khi không phải là hoàn toàn đệ quy cho các đối tượng Ember lồng nhau:
// where myEmberObject is.. an ember object
var plainJavaScriptObject = myEmberObject.toJSON();
này sẽ chỉ bao gồm các thuộc tính thực tế mà bạn đã xác định và không Ember internals. Một lần nữa, nhược điểm ở đây là bất kỳ đối tượng Ember lồng nhau nào cũng sẽ không được chuyển đổi nhưng sẽ xuất hiện dưới dạng Strings theo kiểu "".
Đây là workaround bẩn của tôi
var newModel = JSON.parse(JSON.stringify(model));
lưu ý: điều này không bao gồm các chức năng – Jaime
Ngày nay bạn chỉ có thể sử dụng 'model.toJSON()'. –
Đây là những gì tôi đã làm và nó hoạt động khá tốt. Lưu ý, điều này sẽ sẵn sàng chỉ, như bất kỳ thay đổi đến một đối tượng hoặc mảng trong đối tượng sao chép sẽ ảnh hưởng đến các đối tượng gốc
App.BaseValidations = Ember.Object.create({
toObject: function() {
var destination = {}
for (var k in this) {
if (this.hasOwnProperty(k) && typeof(this[k]) !== 'function') {
destination[k] = this[k];
}
}
return destination;
}
})
một cái gì đó khá đơn giản mà làm việc đúng đủ đối với tôi là:
Ember.Object.reopen({
toJson: function() {
return JSON.parse(JSON.stringify(this));
}
});
tại thời điểm tải ứng dụng.
- 1. Làm cách nào để chuyển đổi mảng đối tượng javascript thành mảng chuỗi thuộc tính đối tượng mà tôi muốn?
- 2. Chuyển đổi đối tượng XmlDocument thành đối tượng XmlNode - C#?
- 3. vòng lặp vô hạn khi chuyển đổi đối tượng loại trực tiếp đến đối tượng JavaScript đơn giản
- 4. Làm cách nào để nối tiếp các đối tượng Ember?
- 5. Đối tượng đơn giản của Python đơn giản
- 6. Javascript chuyển đổi giây thành đối tượng ngày
- 7. chuyển đổi đối tượng DateTime của Net thành đối tượng Ngày Javascript
- 8. chuyển đổi chuỗi javascript thành đối tượng html
- 9. Đối tượng JavaScript DOM đối tượng jQuery
- 10. Javascript/chuyển đổi chuỗi kiểu CSS thành đối tượng JS
- 11. Chuyển đổi đối tượng XMLDocument thành String trong Javascript
- 12. Nối tiếp đối tượng đơn giản nhanh
- 13. Xóa một đối tượng đơn lẻ khỏi đối tượng Javascript
- 14. Làm thế nào để chuyển đổi đối tượng String thành đối tượng Boolean?
- 15. Chuyển đổi chuỗi thành đối tượng JSON
- 16. Chuyển đổi đối tượng để std :: unique_ptr
- 17. Powershell: Chuyển đổi đối tượng thành chuỗi
- 18. Ember.js cách tải một mảng các đối tượng ember đơn giản
- 19. Làm thế nào để chuyển đổi một đối tượng String thành một đối tượng Hash?
- 20. Chuyển đổi chuỗi thành đối tượng datetime.time
- 21. Làm thế nào để biến các đối tượng js lồng nhau thành các đối tượng Ember.js?
- 22. chuyển đổi đối tượng Ngày thành TimeWithZone
- 23. Chuyển đổi đối tượng time_t thành NSDate?
- 24. Chuyển đổi đối tượng thành enum C#
- 25. Có cách nào đơn giản để có được kích thước của một đối tượng java không?
- 26. Nhận dạng đối tượng đơn giản
- 27. Làm cách nào để chuyển đổi đối tượng WriteableBitmap sang đối tượng BitmapImage trong WPF
- 28. Chuyển đổi bất kỳ đối tượng nào thành một byte []
- 29. Chuyển đổi đối tượng JavaScript phức tạp để đối tượng ký hiệu dấu chấm
- 30. chuyển đổi chuỗi để đối tượng datetime
Dường như JSON.stringify cũng bỏ qua "thuộc tính lớp" – Qrilka