2013-08-01 34 views
5

Tôi có JSON dữ liệu này đến từ các máy chủ:lập bản đồ loại trực tiếp JSON cập nhật xem hiện tại mô hình

{"HaveNotification":false,"IsError":false,"Title":null,"Description":null} 

và đang cố gắng để cư mô hình quan điểm này qua ko.mapping:

var notifyVM = { 
    HaveNotification: ko.observable(true), 
    IsError: ko.observable(false), 
    Title: ko.observable('Title goes here'), 
    Description: ko.observable('Description goes here'), 
} 

với mã này , được gọi trong khoảng thời gian bỏ phiếu:

function pollNotifications() { 

    $.getJSON('@Url.Action("GetNotifications", "Home")', function (data) { 

    ko.mapping.fromJSON(data, notifyVM); 

    setTimeout(pollNotifications, 10000); 
    }); 
} 

và đây là mã tải trang:

$(function() { 

    ko.applyBindings(notifyVM); 

    setTimeout(pollNotifications, 10000); 
}); 

nhưng không hoạt động. Nếu tôi kiểm tra mô hình xem sau khi cuộc gọi fromJSON không thể cập nhật các quan sát, chúng vẫn ở giá trị ban đầu của chúng.

UPDATE: Một số thông tin thêm ... nếu tôi làm điều này trong pollNotifications chức năng

var newVM = ko.mapping.fromJSON(data); 

Tôi nhận thấy rằng mô hình xem nó tạo ra là không giống như một của tôi, nó bao gồm một quan sát đơn chức năng, trong khi tôi là một đối tượng với một tập hợp các thuộc tính quan sát được.

+0

cố gắng sử dụng ko.mapping.fromJS –

Trả lời

0

Bạn đã thử ánh xạ thủ công các giá trị cho mô hình chế độ xem và xem liệu nó có hoạt động không, như thế này?

function pollNotifications() { 
    $.getJSON('@Url.Action("GetNotifications", "Home")', function (data) { 
     notifyVM.HaveNotification(data.HaveNotification); 
     notifyVM.IsError(data.IsError); 
     notifyVM.Title(data.Title); 
     notifyVM.Description(data.Description); 

     setTimeout(pollNotifications, 10000); 
    }); 
} 

Nếu những điều trên không có tác dụng thì bạn biết đó là vấn đề với dữ liệu của bạn; nếu không ánh xạ sẽ không xảy ra chính xác với ko.mapping.fromJSON().

+0

Có, hoạt động nếu tôi cập nhật giá trị theo cách thủ công. Nhưng tôi thực sự muốn biết tại sao phương thức ko.mapping không hoạt động. Tôi nghi ngờ cấu trúc dữ liệu JSON không khớp với mô hình khung nhìn của tôi, nhưng tôi không thể thấy ở đâu hoặc tại sao. – user380689

+0

Bạn đã thử 'ko.mapping.fromJS (dữ liệu, thông báoVM);' thay vì hàm 'fromJSON()'?Tôi tự hỏi liệu hàm 'fromJSON()' có bị loại bỏ dữ liệu của bạn khi được hiểu là JSON hay không. –

+0

Có, đã thử điều đó, nhưng vẫn không hoạt động. – user380689

0

Bạn nên sử dụng ko.mapping.fromJS thay vì ko.mapping.fromJSON vì $ .getJSON được trả lại một đối tượng dữ liệu (không phải là một chuỗi json):

Việc gọi lại thành công được truyền dữ liệu trả về, thường là đối tượng hoặc mảng JavaScript như được xác định bởi cấu trúc JSON và được phân tích cú pháp bằng phương thức $ .parseJSON(). Nó cũng được thông qua trạng thái văn bản của phản hồi.

http://api.jquery.com/jquery.getjson/

làm một console.log (dữ liệu); để thấy sự khác biệt

8

Hãy thử:

ko.mapping.fromJS(data, {}, notifyVM);

Dạng tham số hai hy vọng một cái nhìn mô hình mà trước đây đã được tạo ra với ko.mapping.fromJS. Nếu nó không tìm thấy một (dựa trên tìm kiếm một thuộc tính cụ thể mà từJS thêm), nó giả định bạn đang gọi biểu mẫu fromJS (dữ liệu, tùy chọn).

Biểu mẫu tham số 3 loại bỏ sự mơ hồ này.

+0

Wicked Whoot và da bomb! Điều này đã cứu ngày của tôi, cảm ơn! – Michel

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