2012-02-27 22 views
13

Tôi có một mô hình xem Knockout định nghĩa như thế này:Đặt giá trị tài sản xem mô hình bên ngoài Knockout nét

function viewModel() { 
    var self = this; 

    self.myName = ko.observable(); 
    self.myValue = ko.observable("10"); 
}; 

Bây giờ tôi cần phải thay đổi một giá trị của mô hình điểm khi một liên kết được nhấp, như thế này:

$('a.treeitem').live("click", function (e) { 
    e.preventDefault(); 
    viewModel.myValue("20"); // this line does not work 
}); 

Tuy nhiên, tôi không thể tìm ra cách đúng đắn về cách thiết lập các giá trị, Chrome giao diện điều khiển hiển thị thông báo sau: của router Lỗi Loại: chức năng Object ViewModel() {...} không có phương pháp 'myValue'

+0

Đừng sử dụng 'sống() 'nữa :) nó không được chấp nhận. Tốt hơn nên sử dụng 'on()'. Xem trang [live()] (http://api.jquery.com/live/) để biết thêm thông tin về việc ngừng sử dụng – soniiic

+0

Rất tốt! Tôi đã thay đổi mã của mình từ live() thành on(). Cảm ơn. –

Trả lời

22

Bạn có thể lưu các mô hình xem như là một biến như thế này:

window.vm = new viewModel(); 
ko.applyBindings(vm); 

$('a.treeitem').live("click", function (e) { 
    e.preventDefault(); 
    window.vm.myValue("20"); 
}); 

Bất cứ khi nào bạn đọc từ window.vm bạn sẽ được đọc từ đó ví dụ thực tế của đối tượng ViewModel

+0

Đây chính xác là những gì tôi đang tìm kiếm. Cảm ơn! –

+0

Câu trả lời hay, cảm ơn! –

+0

Khi cố gắng sử dụng điều này để viết một giá trị boolean dưới dạng 'vm = new vm (listOfObjects);' và 'vm.Expired (true);' (nói cách khác, để thêm một giá trị boolean), nó nói " Chức năng dự kiến' là lỗi. Văn bản thuần tuý có thể được viết như bạn mô tả – vapcguy

2

Trên thực tế, những gì tôi muốn làm có thể được thực hiện bên trong định nghĩa khung nhìn mô hình, vì vậy tôi có thể thay đổi mã của tôi như thế này:

function viewModel() { 
    var self = this; 

    self.myName = ko.observable(); 
    self.myValue = ko.observable("10"); 

    $('a.treeitem').live("click", function (e) { 
     e.preventDefault(); 
     self.myValue("20"); 
    }); 
}; 

Bây giờ tất cả mọi thứ hoạt động tốt. Đôi khi, đúng cách thực sự là dễ dàng.

+2

Bạn không có nghĩa là 'self.myValue (" 20 ")'? – soniiic

+0

@soniiic Ups, sao chép sai dòng. Đã chỉnh sửa. –

+2

Điều này có vẻ lạ. Chế độ xem có nghĩa là không có bất kỳ phụ thuộc nào trên giao diện người dùng. Mã trong câu trả lời được chấp nhận là nhiều MVVM hơn. –

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