我正在使用Sails v0.10.5。
我创建了三个模型,它们之间有关联。有Candidate
模型,Evaluator
模型和Rating
模型,评估者通过该模型对候选人进行评级。我正在使用Waterline关联自动跟踪从Rating
到Evaluator
和Candidate
的外键。
我也在使用Blueprint自动处理这些模型的所有CRUD路由。
不幸的是,每当我通过Blueprint创建一个新的候选人时,除了触发预期的CREATE之外还会使用http://localhost:1337/rating/create?rating=4&comment=Great&evaluator=3&candidate=2
之类的URL,sails也会返回并调用2 UPDATE& s Candidate
和Evaluator
中的每一个都已设置。
这会导致我的应用程序的前端出现问题,因为它收到UPDATE事件而不是CREATE事件,并且没有必要的上下文来正确处理来自服务器的新数据。 / p>
解决此问题的任何建议都会有所帮助!
以下是Waterline模型:
/api/models/Candidate.js
:
module.exports = {
schema: true,
attributes: {
name: {
type: 'string',
required: true
},
status: {
type: 'string',
required: true
},
role: {
type: 'string',
required: true
},
ratings: {
collection: 'rating',
via: 'candidate'
}
}
};
/api/models/Evaluator.js
:
module.exports = {
schema: true,
attributes: {
name: {
type: 'string',
required: true
},
title: {
type: 'string',
required: true
},
role: {
type: 'string',
required: true
},
ratings: {
collection: 'rating',
via: 'evaluator'
}
}
};
/api/models/Rating.js
:
module.exports = {
schema: true,
attributes: {
rating: {
type: 'integer',
required: true
},
comment: {
type: 'string',
required: false
},
evaluator: {
model: 'evaluator',
required: true
},
candidate: {
model: 'candidate',
required: true
}
}
};
答案 0 :(得分:1)
我遇到了类似的问题。您可以在更新事件中创建一个过滤器,以检查并查看某些变量是否已更新,如果是,则调用一些影响前端的功能。
答案 1 :(得分:0)
您可以覆盖publishCreate
模型的Rating
。大多数code in the default publishCreate
method致力于确定哪些关联通知新模型,以及如何通知它们;因为这正是您不想要的,所以models/Rating.js
中的方法可以非常简单:
publishCreate: function (values, req) {
// Get all of the "watchers" of the Rating model
var watchers = Rating.watchers();
// Remove the socket responsible for the creation, if you don't want
// it to get the "create" message too
watchers = _.without(watchers, req.socket);
// Send a message to the sockets with the "rating" event and the payload
// expected for the "publishCreate" message
sails.socket.emit(sockets, "rating", {
verb: 'created',
data: values,
id: values[this.primaryKey]
});
// Subscribe all watchers to the new instance, if you're into that
this.introduce(values[this.primaryKey]);
}
请注意,publishCreate
是模型的类方法,因此它在之外的<{1}}对象。