2013-08-02 3 views
1

URL에 다른 필드를 사용할 수 있습니까? 이름을 사용하고 싶습니다만, 먼저 특정 오브젝트에서 수행중인 LowCase()에 적용했습니다. 여기 내 코드가있다. 모든 것이 작동하지만 객체 데이터가 뷰에 표시되지 않습니다 ... 어떤 아이디어입니까? 미리 감사드립니다!Ember js는 URL 슬러그에 이름을 사용합니다.

<body> 

<script type="text/x-handlebars"> 
    <div class="container"> 
     <div class="navbar navbar-inverse"> 
      <a class="navbar-brand" href="#">LayerSpark</a> 
      <ul class="nav navbar-nav"> 
       <li class="active">{{#linkTo 'categories'}}Categories{{/linkTo}}</li> 
       <li>{{#linkTo 'help'}}Help{{/linkTo}}</li> 
       <li>{{#linkTo 'account'}}Account{{/linkTo}}</li> 
      </ul> 
     </div> 
    </div> 
    <div class="container"> 
       {{outlet}} 

    </div> 

</script> 


<script type="text/x-handlebars" id="categories"> 

    <div {{bindAttr class=":row"}}> 
     <div {{bindAttr class=":col-lg-4"}}> 
      <ul> 
       {{#each model}} 
       <li>{{#linkTo 'category' slug}}{{name}}{{/linkTo}}</li> 
       {{/each}} 
      </ul> 

     </div> 
     <div {{bindAttr class=":col-lg-8"}}> 
      {{outlet}} 
     </div> 
    </div> 

</script> 

<script type="text/x-handlebars" id="category"> 
    Post:<br> 
    My name is :: {{ categories.name }}<br> 
    My id is :: {{id}}<br> 
    My slug is :: {{slug}}<br> 

</script> 

<script type="text/x-handlebars" id="categories/index"> 
    <p class="text-warning">Please select a Category</p> 
</script> 

<script type="text/x-handlebars" id="help"> 
    <p class="text-warning">Help me</p> 
</script> 

<script type="text/x-handlebars" id="account"> 
    <p class="text-warning">Your bank account is ...</p> 
</script> 

App = Ember.Application.create({ 
    LOG_TRANSITIONS:true 
}); 
DS.RESTAdapter.configure("plurals", { 
    category: "categories" 
}); 
App.Store = DS.Store.extend({ 
    revision: 12, 
    adapter: DS.RESTAdapter.extend({ 
     url: '/api' 
    }) 
}); 

App.Router.map(function() { 
    this.resource('about'); 
    this.resource('categories', function() { 
     this.resource('category',{path:':category_slug'}); 
    }); 
    this.resource('help'); 
    this.resource('account'); 
}); 

App.CategoriesRoute = Ember.Route.extend({ 
    model: function() { 
     return App.Category.find(); 
    } 
}); 
App.CategoryRoute = Ember.Route.extend({ 
    setupController: function(controller, category) { 
     controller.set('model', category); 
    } 
}); 

var attr = DS.attr; 

App.Category = DS.Model.extend({ 
    name: attr('string'), 
    slug: function(){ 
     return this.get('name').toLowerCase(); 
    }.property('name') 
}); 


Ember.Handlebars.registerBoundHelper('markdown', function(input) { 
    return new Handlebars.SafeString(showdown.makeHtml(input)); 
}); 

Ember.Handlebars.registerBoundHelper('date', function(date) { 
    return moment(date).fromNow(); 
}); 

답변

1

은 무엇 당신이 할 수있는 것은 당신의 CategoryRouteserialize 후크에 끼어있다 슬러그를 제공하는 것입니다 app.js.

예 :

App.CategoryRoute = Ember.Route.extend({ 
    setupController: function(controller, category) { 
    controller.set('model', category); 
    }, 
    serialize: function(model) { 
    return { 
     category_slug: model.get("name").toLowerCase() 
    }; 
    } 
}); 

당신이 당신의 모델 또한 슬러그 계산 된 속성을 제거 할 수있는이 방법, 당신의 링크에서 당신이 다음을 수행하십시오

{{#each model}} 
    {{#linkTo 'category' this}}{{name}}{{/linkTo}} 
{{/each}} 

그것이 도움이되기를 바랍니다.

+0

감사합니다. 나는 실제로 그것을 시도했지만 링크에서 나는 "this"가 아닌 "name"을 사용하여 작동하지 않았다. – BrettAHale

+1

후속 질문으로 딥 링크가 작동하지 않는 이유를 알고 있습니까? 예를 들어,/#/categories/name에 직접 가면. 페이지가 비어 있습니다. 컨트롤러에 의존성이 필요합니까? – BrettAHale

관련 문제