我想要一个解决方案,通过验证用户是否提交了一些数据,在同一个函数上保持查看和发布操作。
我的total.js控制器是这样的
# framework
exports.install = (framework) ->
framework.route "/subscribe", subscribe
framework.route "/subscribe", subscribe, ['post']
# subscribe form and action
subscribe = ->
self = this
post = self.post
if post
Subscriber = self.model('subscriber')
Subscriber.save post
self.view "form"
我只是在查看页面(不提交数据)时问题是post
是{}
,所以它总是在if
上输入。
如果我与{}
(if post isnt {}
)进行比较,则条件始终为false,可能是因为self.post
不是空对象。
[更新]
查看页面时:
console.log post #logs {}
提交表单时:
console.log post #logs { type: 1, email: "email@example.com" }
答案 0 :(得分:3)
您不清楚is
/ isnt
。看那个例子:
coffee> {} is {}
false
令人惊讶?如果您知道is
测试是两个变量引用相同的对象,则不是。不是相同的。确实是相同的对象:
coffee> obj1 = {}
{}
coffee> obj2 = obj1
{}
coffee> obj1 is obj2
true
然后,您可以转到==
以测试等效性。但是:
coffee> {} == {}
false
不幸的是,JavaScript does not provide a easy way to test for object equality。
在你的情况下,你应该采取一些技巧。像:
if (i for i in post).length == 0
...
或者可能检查是否存在某些键字段:
if 'type' not of post
...
答案 1 :(得分:2)
简单检查:
function some_action_in_controller() {
var self = this;
// self.body is same as self.post
var isEmpty = Object.keys(self.body).length === 0);
self.json({ result: isEmpty });
}