【问题标题】:Link tag dosen't work in Emberjs链接标签在 Ember Js 中不起作用
【发布时间】:2013-07-17 04:03:10
【问题描述】:

这是模型

App.Store = DS.Store.extend({
   revision: 12,
   adapter: DS.FixtureAdapter
});

App.Markets = DS.Model.extend({
    ids: DS.attr("string"),
    name: DS.attr("string"),
    created: DS.attr("string")
});

App.Markets.FIXTURES = [
    {ids:"312", name:"joy", created:"2012/1/1"},
    {ids:"412", name:"adel", created:"2012/1/2"},
    {ids:"512", name:"john", created:"2012/1/3"}
]; 

App.Sources = DS.Model.extend({
   source_channel: DS.attr("string"),
   handle: DS.attr("handle")
});

App.Sources.FIXTURES = [
    {source_channel:"sc1", handle: "hn1"},
    {source_channel:"sc2", handle: "hn2"}
]; 

这是路线。

var App = Ember.Application.create();

App.Router.map(function() {
    this.resource('markets', {path: '/markets'}, function() {
        this.resource("sources", { path: "/:market_id" });
    });                                                          
});

App.MarketsRoute = Ember.Route.extend({
    model: function () {
        return App.Markets.find();
    }
});

App.SourcesRoute = Ember.Route.extend({
    model: function(){
        return App.Sources.find();
    }
});

这是模板

<script type="text/x-handlebars" id="_sources">
  {{#each sources in content}}
    <span>{{sources.handle}}</span>
    <span>{{sources.sources_channel}}</span>
  {{/each}}

</script>

<script type="text/x-handlebars" id="markets">
    {{#each markets in content }}
        {{#linkTo 'sources' markets.ids class="test" }}<span>Source</span>{{/linkTo}}
        <span>{{markets.name}}</span>
        <span>{{markets.created}}</span>

    {{/each}}

    <div class="sources">
        {{partial "sources"}}
    </div>
</script>  

当我转到/#/markets 时,我可以看到市场列表。这是正确的。

关注市场模板的{{#linkTo 'sources' markets.ids class="test" }}Source{{/linkTo}}

在这里,markets.ids 不起作用。 当我点击链接时,我想去/#/markets/markets_id

【问题讨论】:

    标签: javascript jquery templates model ember.js


    【解决方案1】:

    将对象传递给linkTo中的sources路由,

    App.SourcesRoute 中定义serialize 方法。

    模板:

    {{#linkTo 'sources' markets class="test" }}<span>Source</span>{{/linkTo}}
    

    路线:

     App.SourcesRoute = Ember.Route.extend({
        model: function(){
            return App.Sources.find();
        },
        serialize: function(model) {
            return { market_id: model.ids };
        }
    });
    

    【讨论】:

    • 如果我不使用 serialize ,当我点击某个链接时,我会转到 #/markets/ember331 等。 ember331 不是markets_id。如果我使用序列化,当我单击某个链接时,我会转到 #/markets/undefined 。 :( 我想去#/markets/(markets_id)
    • 我认为这个问题可能是由于您的App.Sources 模型中缺少ids 属性,但不确定。
    【解决方案2】:

    您想改用linkTo 'sources' markets。即:-将每个循环中的模型传递给`linkTo。

    注意:关于您的命名约定。 Ember 喜欢模型是单数的,Routes/Controllers 是复数还是单数,这取决于路由是否指向一个或多个模型。

    编辑:澄清。

    linkTo改成这个,

    {{#linkTo 'sources' markets class="test" }}<span>Source</span>{{/linkTo}}
    

    【讨论】:

    • 那么我该如何解决这个问题?
    • 当我使用 {{#linkTo 'sources'markets class="test" }}Source{{/linkTo}} 时,我如何获取 market_id?
    • 你还需要@Hyder发布的序列化方法
    • 如果我不使用 serialize ,当我点击某个链接时,我会转到 #/markets/ember331 等。 ember331 不是markets_id。如果我使用序列化,当我单击某个链接时,我会转到 #/markets/undefined 。 :( 我想去#/markets/(markets_id)
    猜你喜欢
    • 1970-01-01
    • 2014-05-14
    • 2023-04-01
    • 1970-01-01
    • 2012-07-09
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    相关资源
    最近更新 更多