【问题标题】:Render view component with parameters into named outlet ember.js将带有参数的视图组件渲染到命名的插座 ember.js
【发布时间】:2014-03-08 03:29:00
【问题描述】:

我的应用程序模板中有 2 个命名的网点,slider-areapre-footer。有没有办法将带有参数的视图组件(如索引模板中显示的main-slider 组件)传递给命名的插座?所以我需要将{{main-slider sliders=filteredSlider}} 传递给索引模板中的插座{{outlet "slider-area"}}

我来自 Rails,如果 ember 不是这样,请原谅我的想法。可以在应用程序模板中指定yield :slider_area,然后将该区域的任何内容包装在content_for :slider_area 块中。 ember 中是否有类似的方法?

index.html

<script type="text/x-handlebars" data-template-name="application">
  {{panasonic-topbar}}
    <div id="batterywrap">
      {{outlet "slider-area"}}
        <div class="index_contents">
          <div class="index_contents_inner">
        <div class="main_area">
          {{outlet}}
        </div>
          </div>
       </div>
     </div>
  {{panasonic-footer}}
</script>

<script type="text/x-handlebars" data-template-name="index">
  # Something like {{outlet "slider-area" render main-slider sliders="filteredSlider}} ?
  {{main-slider sliders=filteredSlider}}
  {{partial "social_footer"}}
</script>

app.js

App.IndexController = Ember.ObjectController.extend({
    filteredSlider: function(){
      return this.get('sliders').filterBy('page', 'index');
    }.property('sliders.@each.page')
});

App.IndexRoute = Ember.Route.extend({
    model: function() {
      return Ember.RSVP.hash({ 
        sliders: this.store.find("slider")
      });
    }
});

【问题讨论】:

    标签: javascript jquery ember.js ember-data


    【解决方案1】:

    好的,所以我有一个解决这个问题的方法,而不是尝试将模板中的视图组件传递给特定的插座(ruby on rails 方式),关键是创建一个模板,而不是一个组件,并且从 Route 中渲染到特定的 outlet。

    当从 Route 渲染时,滑块模板可以访问 Routes 控制器范围内的所有函数,因此我们在将使用此模板的所有控制器中通用命名函数/参数,并且我们的动态参数应该可以工作。

    所以在 IndexRoute 下面我们定义了我们发送给控制器的数据,sliders,我们还指定我们要使用this.render(); 在默认插座中渲染普通内容,然后我们渲染我们的共享滑块模板进入命名的出口“滑块区域”。然后在我们的控制器中,我们根据我们的规范过滤模型数据,并在所有使用此功能的控制器中将此函数命名为 batterySliders。

    app.js

    App.IndexController = Ember.ObjectController.extend({
        batterySliders: function(){
            return this.get('sliders').filterBy('page', 'index');
        }.property('sliders.@each.page')
    });
    
    App.IndexRoute = Ember.Route.extend({
        model: function() {
            return Ember.RSVP.hash({ 
                sliders: this.store.find("slider"),
            });
        },
        renderTemplate: function(){
            this.render();
            this.render("slider", {outlet: "slider-area"});
        }
    });
    

    index.html

    <script type="text/x-handlebars" data-template-name="slider">
            {{panasonic-navigation tagName="div" classNames="gnavi_area"}}
            <div class="slider_wrap">
                <div id="slider" class="main_slider">
                {{#each slider in batterySliders}}
                    <div class="slider_area slider0{{unbound slider.id}} {{unbound slider.background}}">
                        <div class="slider_inner">
                            <div class="inner0{{unbound slider.id}}">
                                <img {{bind-attr src="slider.image" alt="slider.image"}} class="nosp"/>
                                <img {{bind-attr src="slider.sm_image" alt="slider.sm_image"}} class="sp"/> 
                            </div>
                        </div>
                    </div>  
                {{/each}}               
                </div>
            </div>
        </script>
    

    应用程序.html

    <script type="text/x-handlebars" data-template-name="application">
        {{panasonic-topbar}}
        <div id="batterywrap">
            <div class="content_head">
                {{outlet "slider-area"}}
            </div>  
            <div class="index_contents">
                <div class="index_contents_inner">
                    <div class="main_area">
                        {{outlet}}
                    </div>
                </div>
            </div>
        </div>
        {{panasonic-footer}}
    </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 2018-10-04
      • 2015-10-06
      相关资源
      最近更新 更多