在我的应用中,我在视图中有一个名为“通知”的部分,名为'home.html'
。现在我需要在另一个视图中使用此部分,所以我复制了'notifications.html'中的所有通知标记,我正在通过合成使用。
问题是我不想将用于通知的所有代码从'home.js'复制到我将要使用通知的新视图的另一个viewmodel。因此,我没有在视图模型中包含observableArray
个通知,而是希望只为包含此数据的'notification.html'提供一个模块。但我不知道如何从我的其他视图模型中更改observableArray
内部'notification.js'的值。
这是我到目前为止所做的:
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>
我所知道的是,在compose绑定中使用viewmodel路径时,会注入该viewmodel的标记并绑定到它的模块视图模型。
问题:我想从我的主视图'notification.js'
的viewmodel更改'home.js'
内的'notifications'数组的值。我知道我当前的试验性不会起作用,因为我认为注入notifications.js
的{{1}} viewmodel实例与我在notifications.html
内所需的实例不同。那我怎么能实现呢?
答案 0 :(得分:0)
我可以使用model
绑定上的compose
属性解决此问题。
标记:
<div data-bind="compose: { view: 'views/notifications', model: $root.notificationModel }"></div>
notification.js具有相同的代码 - 它返回viewmodel(&#34; return vm&#34;)
在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)
})
}
})