2013-02-21 2 views
0

Мой Ember Код не является обязательным видом ребенка на его контроллеры под ContainerView контроллераember.js containerview вид контроллер связывания не работает

У меня есть шаблон «метрика», для которого MetricsView не тянет название значения атрибута из его контроллера. Это дочерний вид в представлении контейнера, и это происходит со всеми другими представлениями, которые находятся под контролем.

Вот код snippent Я использую:

Это как мой Контейнер View выглядит

// Container View 
App.DashboardContainerView = Ember.ContainerView.create({ 
    childViews: [], 
    view1: App.MetricsView, 
    view2: App.ResultsView, 
}); 

Это как мой взгляд Ребенок выглядит следующим образом: App.MetricsView = Ember.View. create ({ ] шаблон: Ember.TEMPLATES ["метрики"] });

Это как мой ребенок View контейнерной выглядит следующим образом: контроллер // Child View, которая не привязана с детьми View, // Требуется, чтобы сделать название от этого контроллера в шаблон Шаблон

App.MetricsController = Ember.ObjectController.extend({ 
    title: 'Metrics Page', // To Be deleted later 
    content : [] 
    metrics : [], 

    view: Ember.View.create({ 
     templateName: 'metrics' 
    }), 

    show : function(petId, onDone, onFail) { 
     _get('/fetch_one', onDone, onFail); 
    }, 
}); 

ребенка// Здесь {{название}} не печатает на пользовательском интерфейсе, а "- Резюме" печатает

<script type="text/x-handlebars" data-template-name="metrics"> 
    <div class='well well-large'> 
     <div class="container"> 
      <div class="row"> 
       <div class="span9"> 
        <h4>{{title}}</h4> 
        <h4> -- Summary</h4> 
       </div> 
       <div class="span1"> 
        <button {{action "toggle" }} class="close">&times;</button> 
       </div> 
      </div> 
     </div> 
    </div> 
</script> 

Некоторые другие поддерживаемые код:

var App = Ember.Application.create({ 
    appName: 'Portal', 
    debug: true, 
    demomode: 1, 
    version: '0.0.1' 
}); 

App.Router.map (function() { 
    this.resource('pets'); 
    this.resource('pet', {path: ':pet_id'}, function(){ 
     this.resource('dashboard'); 
     this.resource('list', function() { 
      this.route('summary'); 
      this.route('results'); 
     }); 
    }); 
}); 

//ApplicationRoute 
App.ApplicationRoute = Ember.Route.extend({ 
    setupController: function(){ 
    }, 
}); 

App.IndexRoute = Ember.Route.extend({ 
    redirect : function() { 
     this.transitionTo('pets'); 
    } 
}); 


App.PetsRoute = Ember.Route.extend({ 
    model: function() { 
     return App.Pet.find(); 
    }, 
    renderTemplate: function() { 
     this.render({ outlet: 'rightpane' }); 
    } 
}); 


App.PetsController = Ember.ArrayController.extend({ 
    sortProperties : [ 'first_name' ], 
    sortAscending : true 
}); 

App.DashboardRoute = Ember.Route.extend({ 
    setupController: function(){ 
     var menuItems; 
     if (App.DashboardContainerView.get('childViews')) { 
      App.DashboardContainerView.get('childViews').pushObject(App.DashboardContainerView.view1); 
      App.DashboardContainerView.get('childViews').pushObject(App.DashboardContainerView.view2); 

      menuItems = this.controllerFor('petDashboardMenu').get('model'); 
      $(menuItems).each(function(index, menuItem) { 
       if (menuItem.id == 1 || menuItem.id == 2) { 
        alert(menuItem); 
       } 
      }); //TODO: Make the menu buttons active for which view is added. 
     } 

     //this.controllerFor('pets').set('model', App.Preference.find({ name: "Dennis" })); 
     this.controllerFor('petDashboardMenu').set('model', App.PetMenuItem.find()); 
    }, 
    renderTemplate: function() { 
     this.render({ outlet: 'rightpane' }); 
    } 
}); 

App.DashboardController = Ember.ObjectController.extend({ 
    name: 'Dashboard' 
}); 

App.PetDashboardMenuController = Ember.ArrayController.extend({ 
    toggleMenuItem: function(menuItem) { 
     var link = $(event.srcElement); 
     var childViews = App.DashboardContainerView.get('childViews'); 
     if (link.hasClass('active')) { 
      link.removeClass('active'); 
      var present = false; 
      switch (link.text()) { 
       case 'Summary': 
        present = App.DashboardContainerView.get('childViews').indexOf(App.DashboardContainerView.view1); 
        break; 
       case 'Results': 
        present = App.DashboardContainerView.get('childViews').indexOf(App.DashboardContainerView.view2); 
        break; 
       default: 
        present = App.DashboardContainerView.get('childViews').indexOf(App.DashboardContainerView.view1); 
      } 
      if(present >= 0) { 
       // ToDo : For All Menu Items 
       switch (link.text()) { 
        case 'Summary': 
         App.DashboardContainerView.get('childViews').removeObject(App.DashboardContainerView.view1); 
         break; 
        case 'Results': 
         App.DashboardContainerView.get('childViews').removeObject(App.DashboardContainerView.view2); 
         break; 
        default: 
         App.DashboardContainerView.get('childViews').removeObject(App.DashboardContainerView.view1); 
       } 
       App.log('Removed Summary : Removed : View Count : ' + App.DashboardContainerView.get('childViews').length); 
      } else { 
       App.log('Removed Summary : Already Not Present : View Count : ' + App.DashboardContainerView.get('childViews').length); 
      } 
     } else { 
      link.addClass('active'); 
      var present = null; 
      App.log('Link Text : "' + link.text() + '"'); 
      switch (link.text()) { 
       case 'Summary': 
        present = App.DashboardContainerView.get('childViews').indexOf(App.DashboardContainerView.view1); 
        break; 
       case 'Results': 
        present = App.DashboardContainerView.get('childViews').indexOf(App.DashboardContainerView.view2); 
        break; 
       default: 
        present = App.DashboardContainerView.get('childViews').indexOf(App.DashboardContainerView.view1); 
      } 

      if(present >= 0) { 
       App.log('Adding Summary : Already Present : View Count : ' + App.DashboardContainerView.get('childViews').length); 
      } else { 
       // ToDo : For All Menu Items 
       switch (link.text()) { 
        case 'Summary': 
         App.DashboardContainerView.get('childViews').pushObject(App.DashboardContainerView.view1); 
         break; 
        case 'Results': 
         App.DashboardContainerView.get('childViews').pushObject(App.DashboardContainerView.view2); 
         break; 
        default: 
         App.DashboardContainerView.get('childViews').pushObject(App.DashboardContainerView.view1); 
       } 
       App.log('Added Summary : View Count : ' + App.DashboardContainerView.get('childViews').length); 
      } 
     } 
    } 
}); 

App.log = function(message) { 
    if(App.debug) { 
     console.log(message); 
    } 
}; 

Любые указатели будут оценены?

+0

Можете ли вы поместить это в jsFiddle и указать на то, что не работает так, как вы ожидаете? – Wildhoney

ответ

2

У меня возникли трудности с этой точной проблемой, когда я обнаружил, что функциональность устарела. Я получил следующее предупреждение:

манипулируя Ember.ContainerView через его собственность childViews является устаревшим. Используйте экземпляр ContainerView непосредственно как Ember.MutableArray.

Вам нужно будет использовать pushObject как состояния documentation.

Смежные вопросы