Durandal 撰写绑定视图模型变量的更改值
Durandal compose change value of a variable of bound viewmodel
在我的应用程序中,我在名为 'home.html'
的视图中有一个名为 'notifications' 的部分。现在我需要在另一个视图中使用此部分,所以我复制了 'notifications.html' 中的所有通知标记,我正在通过组合使用这些标记。
问题是我不想将我用于通知的所有代码从 'home.js' 复制到将使用通知的新视图的另一个视图模型。因此,我不想在视图 viewmodel 中有一个 observableArray
的通知,而是想要一个仅用于 'notification.html' 的包含此数据的模块。但是我不知道如何从我的其他视图模型中更改 'notification.js' 内的 observableArray
的值。
这是我目前所做的:
notification.js
define(['knockout'], function(ko) {
var notifications = ko.observableArray([]),
setNotifications = function(data) {
notifications(data)
}
return {
notifications: notifications,
setNotifications: setNotifications
}
home.js
define(['knockout', 'notification'], function(ko, notification) {
var self = this
...
self.activate = function() {
http.get('...').then(function(data) {
notification.setNotification(data)
})
}
home.html
<div data-bind="compose: 'viewmodels/notifications'"></div>
我所知道的是,当在组合绑定中使用视图模型路径时,该视图模型的标记被注入并绑定到它的模块视图模型。
问题:我想从主视图 'home.js'
的视图模型中更改 'notification.js'
中 'notifications' 数组的值。我知道我目前的尝试是行不通的,因为我相信注入 notifications.html
的 notifications.js
viewmodel 实例与我在 home.js
中需要的实例不同。那么我该如何实现呢?
我可以在 compose
绑定上使用 model
属性 来解决这个问题。
标记:
<div data-bind="compose: { view: 'views/notifications', model: $root.notificationModel }"></div>
notification.js 具有相同的代码 - returns 视图模型 ("return vm")
并且在 home.js 文件中:
define(['knockout', 'plugins/http', 'notification'], function(ko, http, NotificationModel) {
var self = this
self.notificationModel;
...
self.activate = function() {
return http.get('').then(function(data) {
self.notificationModel = new NotificationModel()
self.notificationModel.setNotifications(data)
})
}
})
在我的应用程序中,我在名为 'home.html'
的视图中有一个名为 'notifications' 的部分。现在我需要在另一个视图中使用此部分,所以我复制了 'notifications.html' 中的所有通知标记,我正在通过组合使用这些标记。
问题是我不想将我用于通知的所有代码从 'home.js' 复制到将使用通知的新视图的另一个视图模型。因此,我不想在视图 viewmodel 中有一个 observableArray
的通知,而是想要一个仅用于 'notification.html' 的包含此数据的模块。但是我不知道如何从我的其他视图模型中更改 'notification.js' 内的 observableArray
的值。
这是我目前所做的:
notification.js
define(['knockout'], function(ko) {
var notifications = ko.observableArray([]),
setNotifications = function(data) {
notifications(data)
}
return {
notifications: notifications,
setNotifications: setNotifications
}
home.js
define(['knockout', 'notification'], function(ko, notification) {
var self = this
...
self.activate = function() {
http.get('...').then(function(data) {
notification.setNotification(data)
})
}
home.html
<div data-bind="compose: 'viewmodels/notifications'"></div>
我所知道的是,当在组合绑定中使用视图模型路径时,该视图模型的标记被注入并绑定到它的模块视图模型。
问题:我想从主视图 'home.js'
的视图模型中更改 'notification.js'
中 'notifications' 数组的值。我知道我目前的尝试是行不通的,因为我相信注入 notifications.html
的 notifications.js
viewmodel 实例与我在 home.js
中需要的实例不同。那么我该如何实现呢?
我可以在 compose
绑定上使用 model
属性 来解决这个问题。
标记:
<div data-bind="compose: { view: 'views/notifications', model: $root.notificationModel }"></div>
notification.js 具有相同的代码 - returns 视图模型 ("return vm")
并且在 home.js 文件中:
define(['knockout', 'plugins/http', 'notification'], function(ko, http, NotificationModel) {
var self = this
self.notificationModel;
...
self.activate = function() {
return http.get('').then(function(data) {
self.notificationModel = new NotificationModel()
self.notificationModel.setNotifications(data)
})
}
})