2014-08-29 25 views
5

Khi tùy chọn 'tạo' được sử dụng trong bản đồ loại bỏ, chúng tôi sẽ biến mảng thành một mảng quan sát được. Nhưng làm thế nào để chúng ta làm cho các thuộc tính của từng đối tượng trong mảng quan sát có thể quan sát được? Trong ví dụ này từ tài liệu loại trực tiếp, mảng con được tạo thành một mảng quan sát được nhưng tôi muốn làm cho tất cả các phần tử như id, tên trong mỗi đối tượng theo nghĩa đen cũng phải là một quan sát được. Làm sao chúng ta đạt được điều đó. Chỉ cần đặt một ko.observable trên mỗi đối tượng mới trong khối tạo?Làm thế nào để làm cho các thuộc tính đối tượng trong một mảng quan sát loại trực tiếp có thể quan sát được?

var data = { 
    name: 'Graham', 
    children: [ 
     { id : 1, name : 'Lisa' } 
    ] 
}; 

// Your custom data model 
var myChildModel = function (data) { 
    this.id = data.id; 
    this.name = data.name; 
}; 

var mapping = { 
    'children': { 
     create: function(options) { 
      return new myChildModel(options.data); 
     } 
    } 
}; 

var viewModel = ko.mapping.fromJS(data, mapping); 

Trả lời

1

mỗi sự documentation:

  • Tất cả các thuộc tính của một đối tượng được chuyển đổi thành một thể quan sát được.

Như vậy, xuống trong phần về xây dựng đối tượng Tuỳ chỉnh sử dụng “tạo ra” nó khẳng định

Tất nhiên, bên trong tạo ra gọi lại bạn có thể làm một cuộc gọi khác đến ko.mapping.fromJS nếu Bạn ước.

Ví dụ được cung cấp như sau:

var myChildModel = function(data) { 
    ko.mapping.fromJS(data, {}, this); 

    this.nameLength = ko.computed(function() { 
    return this.name().length; 
    }, this); 
} 

Đương nhiên, điều này sẽ chuyển đổi tất cả các thuộc tính. Sau đó, cấu hình chi tiết hơn có thể được áp dụng cụ thể cho cuộc gọi lập bản đồ đó để xử lý các yêu cầu tùy chỉnh.

1

Câu trả lời nhanh chóng là thực hiện các thuộc tính của đối tượng quan sát được

var myChildModel = function (data) { 
    this.id = ko.observable(data.id); 
    this.name = ko.observable(data.name); 
; 

Nó cũng có thể là cách dễ dàng nhất, mặc dù có những người khác

0

Đơn giản chỉ cần:

var viewModel = ko.mapping.fromJS(data); 

Nó làm mọi thứ, làm cho cả hai thuộc tính và mảng có thể quan sát được. Tham số thứ hai của phương thức này chỉ dành cho mục đích tùy chỉnh. Bạn không cần phải sử dụng nó nếu bạn không cần!

Các vấn đề liên quan