Ember js存储并将点击的{{#link-to}}属性传递给Route模型

时间:2014-11-11 12:52:39

标签: ember.js handlebars.js

我是Ember.js的新手,我正在尝试通过重写我的旧应用程序来学习它。不幸的是,我很早就陷入困境,需要一些帮助,因为无法在网上找到答案。

我有以下代码:



App = Ember.Application.create({
	LOG_TRANSITIONS: true
});

App.Router.map(function () {
	this.resource("users", function () {
		this.resource("score", {path: "/:nickname"});
	});
});

App.UsersRoute = Ember.Route.extend({
	model: function () {
		var url = "server url";
		return new Ember.RSVP.Promise(function (resolve, reject) {
			resolve($.getJSON(url));
		});
	}
});

App.ScoreRoute = Ember.Route.extend({
	model: function () {
		var url = "server url" + "?nickname=";
		url += passedNicknameFromclickedLink;
		return new Ember.RSVP.Promise(function (resolve, reject) {
			resolve($.getJSON(url));
		});
	}
});

<script type="text/x-handlebars">
	<nav>
		{{#link-to "users"}}Users{{/link-to}}
	</nav>
	<main class="main-wrapper">{{outlet}}</main>
</script>

<script type="text/x-handlebars" data-template-name="users">
	<div class="user-score">{{outlet}}</div>
	<h2>Users</h2>
	{{#each}}
		<div>{{#link-to "score" nickname}}{{nickname}}{{/link-to}}</div>
		<div>{{games}}</div>
		<div>{{score}}</div>
	{{/each}}
</script>

<script type="text/x-handlebars" data-template-name="score">
	<h2>Score for {{nickname}}</h2>
	{{#each categoryScores}}
		<div class="scores">
			<div>{{category}}</div>
			<div>{{gamesPlayed}}</div>
			<div>{{score}}</div>
		</div>
	{{/each}}
</script>
&#13;
&#13;
&#13;

我要做的是在&#34;用户&#34;的{{#link-to}}中点击用户点击的{{nickname}}属性。模板并将其传递给&#34;传递尼克名字点击链接&#34;变量到App.ScoreRoute以发出服务器请求。我想知道这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

看起来你几乎一切都正常,你只需要2件事。首先,您可以使用params参数访问nickname挂钩中的model动态细分。

model: function(params) {
    var passedNicknameFromclickedLink = params.nickname;
}

其次,因为Ember假设您的路线和模型有很多惯例,所以您也必须覆盖路线中的serialize方法。使用serialize方法,您要做的是从您的模型(服务器中的JSON)开始,并返回用于查找该模型的昵称。我不确切知道你的JSON是什么样的,但它可能看起来像这样:

serialize: function(model) {
    return encodeURI(model.nickname);
}