2012-01-18 42 views
8

Tôi đã có hai câu hỏi xin vui lòng:Gán giá trị cho knockout quan sát tự động xác định bởi tên chuỗi

Tôi đang sử dụng loại trực tiếp (Tôi là một KO Noob sry) và tôi muốn gán một giá trị cho một cụ thể knockout có thể quan sát được khi một sự kiện click nhưng chỉ được xác định dựa trên sự kiện click (và giá trị tôi sẽ chuyển đến data-bind = click) ... có thể làm được không ... ngay khi tên của nó (một giá trị chuỗi) thay vì phải biết cái nào có thể quan sát được tôi sẽ gán một giá trị trước đó?

Và, thứ hai ít quan trọng hơn, nếu như một chức năng ko.ObservableByName (stringName) tồn tại là nó có thể sử dụng nó bằng cách nào đó và gán trước lựa chọn nhiều mục chọn khi tải trang .. và làm thế nào xin vui lòng?

tôi đã cố gắng để làm điều này ... Tôi đã sử dụng dữ liệu ràng buộc = "click: loadData.bind ($ data, 'param1', 'param2')" và sau đó tôi 'm có thể nhận được những param1param2 giá trị chuỗi bằng cách xây dựng một event handler trong viewmodel loại trực tiếp của tôi mà đi một cái gì đó dọc theo dòng:

self.loadData = function (src, dest) { 
    //dest is 'param1', src is 'param2', both are stings 
    if (src == 'param1') 
     self.p1observable($('#' + dest).val()); 
    else 
     self.p2observable($('#' + dest).val()); 
} 

vấn đề lớn nhất của tôi với điều này là tôi phải xây dựng chức năng với các quan sát p1/p2 đã được chỉ định và mã hóa cứng trong nó, nhưng thực sự tôi muốn lấy param1 và param2 để được sử dụng như tên hoặc tham chiếu theo tên của một số quan sát của tôi, mà sau đó tôi có thể truyền theo ý muốn (cùng với giá trị được gán, hoặc tốt hơn nhưng có thể quan sát được tôi muốn sao chép giá trị từ giá trị đầu tiên), và do đó tôi có thể gán giá trị được chuyển vào trong hàm nhấp chuột gọi trực tiếp đến một lựa chọn của tôi (và không có số lượng lớn các hàm nhỏ như vậy) ...

Có thể tôi đang đi sai đường? Có lẽ tôi không nên vượt qua các giá trị chuỗi ... Có lẽ tôi nên cố gắng vượt qua trong một đối tượng quan sát được, nhưng làm thế nào có thể làm điều đó bên trong dữ liệu-ràng buộc, bạn chỉ cần viết myViewModel.myObservable hoặc một cái gì đó như thế?

+0

Bạn có thể đăng một ví dụ về những gì bạn đã có cho đến nay? – ericb

Trả lời

15

Nếu bạn có đối tượng cha mẹ của bạn, sau đó bạn có thể truy cập vào một thể quan sát được bằng cách sử dụng cú pháp sau:

viewModel[observableName]

và thiết lập giá trị như:

viewModel[observableName](newValue)

Đây là một mẫu nơi bạn có thể chọn tên thuộc tính từ trình đơn thả xuống và sau đó đặt giá trị cho phù hợp và một giá trị khác nơi nút được liên kết trực tiếp để đặt giá trị quan sát/giá trị: http://jsfiddle.net/rniemeyer/CTnUQ/

+0

gần như chính xác những gì tôi cần, vì vậy cảm ơn rất nhiều ... chỉ cần một sidenote, nếu bên trong viewModel, sử dụng ký hiệu [observableName] này ... nhưng tôi đoán nó sẽ hoạt động nếu bạn đang sử dụng nó từ bên ngoài viewModel xây dựng, những gì tôi không chắc chắn, cho dù điều này có hiệu quả không, ví dụ tôi có một số trang khác nhau và mỗi trang sẽ tải một kịch bản lệnh xemModel bên ngoài, sau đó nhiều trang sử dụng cùng một trường hợp dữ liệu hoặc bản sao riêng của viewModel được tải từ tệp .js bên ngoài? Tôi sẽ thử sớm thôi, tôi bị JQMobile kẹt lại và lỗi changePage không thể giải quyết được trên WP7_ – dada

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