【发布时间】:2014-03-07 15:25:45
【问题描述】:
当我最后构建我的应用程序时,我想测试我的所有功能,但主要功能停止工作......
我的登录表单似乎无法从表单中获取用户信息。
我的登录模板:
<script type="text/x-handlebars" data-template-name="login">
<form {{action "login" on=submit}}>
<div>
<div>
<label>Domain</label>
</div>
<div>
{{input type="text" value=domain placeholder="Domain"}}
</div>
</div>
<div>
<div>
<label>Username</label>
</div>
<div>
{{input value=username type="text" placeholder="Username"}}
</div>
</div>
<div>
<div>
<label>Password</label>
</div>
<div>
{{input value=password type="password" placeholder="Password"}}
</div>
</div>
<button type="submit" {{bind-attr disabled="isProcessing"}}>Log in</button>
</form>
</script>
还有我的登录控制器:
App.LoginController = Ember.ObjectController.extend({
actions: {
login: function() {
var data = this.getProperties("domain", "username", "password");
console.log(data);
}
}
});
我的“登录”操作已触发,但出现了无法解释的错误:
Assertion failed: Cannot delegate set('domain', g) to the 'content' property of object proxy <App.LoginController:ember330>: its 'content' is undefined.
Uncaught Error: Property set failed: object in path "domain" could not be found or was destroyed.
一开始它是有效的,我必须说我不知道这是什么问题。
[编辑] 这是我的 LoginController 和我的地图:
App.Router.map(function() {
this.route('login', { path: '/' });
this.route('home');
});
App.LoginController = Ember.ObjectController.extend({
loginFailed: false,
isProcessing: false,
isSlowConnection: false,
timeout: null,
actions: {
isSession: function(transition) {
var session = this;
Ember.$
.get(host + '/session', function(data) {
console.log('DEBUG: Session OK');
var log = data.user;
session.store.push('login', log);
})
.fail(function() {
console.log('DEBUG: Session FAIL');
transition.abort();
session.transitionToRoute('login');
});
},
login: function() {
this.setProperties({
loginFailed: false,
isProcessing: true
});
this.set("timeout", setTimeout(this.slowConnection.bind(this), 1));
var data = this.getProperties("domain", "username", "password");
console.log(data);
this.getLoginInfo(data);
}
},
slowConnection: function() {
this.set('isSlowConnection', true);
},
reset: function() {
clearTimeout(this.get("timeout"));
this.setProperties({
loginFailed: false,
isSlowConnection: false,
isProcessing: false
});
},
getLoginInfo: function(data) {
var login = this;
Ember.$
.post(host + '/login', data, function(data) {
console.log('DEBUG: Login OK');
login.reset();
var test = data.session.user;
login.store.push('login', test);
login.transitionToRoute('home');
})
.fail(function() {
login.reset();
login.set('loginFailed', true);
console.log('DEBUG: Login Failed')
});
}
});
我在每个 beforeModel 中为我的其他页面使用 isSession 函数来验证会话是否仍然可用,如果是,则将登录数据推回商店以再次保存。
【问题讨论】:
-
请包括测试。
-
发生此错误的原因通常是
ObjectController的content属性为null。您的代码中是否还有其他地方set该控制器的内容? -
我不确定你的问题,但我只是在我的 LoginController 中使用这些数据。也是我应用的第一页...
标签: ember.js