我試圖在EmberJS中使用Bootstrap Popover,這樣popover的內容就是一個ember/handlebars模板(帶有綁定等)。如何才能做到這一點? (恩伯1.0.0-RC2)帶有ember.js的Bootstrap Popovers模板
回答
這裏是餘燼引導酥料餅的工作示例(見http://jsfiddle.net/72fSd/):
App.Popover = Ember.View.extend({
parentSelector: '',
contentSelector: '',
didInsertElement: function() {
var self = this;
$(self.parentSelector).popover({
html: true,
content: function() {
var $content = $(self.contentSelector);
return $content.html();
}
});
}
實例化的觀點:
{{view App.Popover templateName="my-popover-content" parentSelector=".popoverButton" contentSelector="#popovercontent"}}
這裏,parentSelector可能例如選擇一個按鈕。確保你的my-popover-content模板中有一個ID爲#popovercontent的div容器,以便contentSelector能夠正常工作。當然,您需要在初始化視圖之前加載模板。
雙向綁定應與該解決方案一起使用。
當然,如果你想彈出一個圖像做這樣的東西在您查看
imgTag: '<img src="smiley.gif" alt="Smiley face" height="42" width="42">',
didInsertElement: function() {
var self = this;
Ember.run.schedule('actions', this, function() {
self.$().popover({
title: 'Smile!!!',
html: true,
content: self.get('imgTag'),
placement: 'bottom',
trigger: 'hover'
});
});
},
willDestroyElement: function() {
this.$().popover('destroy');
}
這讓我在內容中使用靜態HTML,如何渲染一個模板呢? –
內容:Ember.Handlebars.compile(「我的把手{{handlebarProperty}}」) – pjlammertyn
或內容:'
',然後在代碼中創建您的視圖:var popupContentView = APP.PopUpContentView.create({controller:popupContentController } );並將其附加到您的內容div popupContentView.appendTo($('#myPopupContentId')); – pjlammertyn我也碰到過這個問題,並且遇到了羅伯特上面提到的同樣的問題,可接受的解決方案根本無法很好地擴展到更復雜的場景。
我遇到了一個非常優雅的修復,但我不確定它是多麼友好。我走的是功能renderToBuffer的優勢 - 見下文:
//make your popover view to be created later
App.PopoverView = Ember.View.extend({
templateName : 'name-of-your-template-with-content'
});
//then you make your link that will trigger the popover
App.PopoverLinkView = Ember.View.extend({
tagName : 'a',
didInsertElement : function(){
var that = this;
this.$().popover({
'html' : true,
'content' : function(el){
var detailView = App.PopoverView.create();
var html = detailView.renderToBuffer().buffer;
return html;
}
});
}
});
這裏的好處是,你可以在模型傳遞,使事情的動態。還沒有完全測試過,但是希望能夠幫助其他人。
我把羅伯特的答案提高了一點。我創建了一個組件,並且僅僅爲內容使用了jQuery元素,而不是調用.html()。 (這可以緩解頁面中存在重複ID的問題。)
App.CustomPopoverComponent = Ember.Component.extend({
tagName: 'button',
classNames: 'btn btn-default',
type: 'button',
popoverContentSelector: '',
didInsertElement: function() {
var component = this,
contents = $(component.get('popoverContentSelector'));
component.$().popover({
placement: 'bottom',
html: true,
content: contents
}).on('show.bs.popover', function() {
contents.removeClass('hide');
});
},
willDestroyElement: function() {
this.$().popover('destroy');
}
});
我用Bootstrap的'隱藏'類來初始隱藏內容。然後我第一次去popover的時候刪除了'hide'類。從那時起,事情按預期工作。
這是如何在車把模板中使用的組件:
{{#custom-popover popoverContentSelector='.popoverContents'}}
Popover Button
{{/custom-popover}}
我接過特里的回答一點,並認爲我想出了一個簡單的,一般的解決這個問題。
我創建了一個自舉酥料餅的部件,像這樣:
App.BootstrapPopoverComponent = Ember.Component.extend({
tagName: 'div', //whatever default you want... div is default anyway here
classNames: '', //whatever default you want
placement: 'bottom', //whatever default you want
didInsertElement: function() {
var component = this,
contents = this.$('.popoverJs');
component.$().popover({
animation: false,
placement: component.get('placement'),
html: true,
content: contents
}).on('show.bs.popover', function() {
contents.removeClass('hide');
});
},
willDestroyElement: function() {
this.$().popover('destroy');
}
});
下面是相關的模板:
<script type="text/x-handlebars" id="components/bootstrap-popover">
{{title}}
<div class="popoverJs hide">
{{yield}}
</div>
</script>
的使用注意事項「隱藏」級最初隱藏產生內容。這個類只是「display:none」。沒有這個,事情就不會如你所願。
一旦你有,你可以做簡單的做這樣的事情,只要你想酥料餅:
{{#bootstrap-popover title="My Fancy Popover" tagName="button"}}
<ul>
<li>my</li>
<li>awesome</li>
<li>popover</li>
<li>contents</li>
<li>example</li>
</ul>
{{/bootstrap-popover}}
的內容應該可以成爲任何你想要的 - 任意的HTML渲染組件或部分等。當然,您可以根據需要指定其他tagNames,classNames,標題,位置等。
我希望這個解決方案有幫助。
- 1. Bootstrap中的Popovers 2.2.1
- 2. Ember.js:帶參數的渲染模板
- 3. 造型Bootstrap 3 Popovers
- 4. 將模型傳遞到Bootstrap for Ember Popovers
- 5. ember.js模板沒有呈現
- 6. ember.js模板
- 7. Ember.js模板
- 8. Popovers不適用於bootstrap?
- 9. 帶有嵌入對象的Ember.js模型
- 10. Ember.js模板渲染
- 11. Ember.js數據模板
- 12. Bootstrap傳送帶模板不起作用
- 13. 帶有JS的Bootstrap Tab面板
- 14. 帶有angular2模板的刀片模板?
- 15. Rails上的Bootstrap popovers simple_form輸入
- 16. 動態更改Bootstrap Popovers中的文本
- 17. 帶有js對象的Ember.js
- 18. 使用不帶模板腳本標記的ember.js
- 19. Ember.js與Twitter Bootstrap Modal
- 20. 在Ember.js中嵌套模板
- 21. Ember.js - 用同一模板
- 22. 基本ember.js模板概念
- 23. Ember.js綁定和模板
- 24. Ember.js重定向到模板
- 25. Bootstrap 4 navbar,帶有下拉菜單和響應模板?
- 26. Bootstrap 3 popovers不隨元素移動
- 27. 如何在twitter-bootstrap中編寫popovers?
- 28. Rails 4 - Bootstrap Popovers - js不工作
- 29. 如何模塊化ember.js模板?
- 30. Ember.js和Twitter Bootstrap Popover
你能把這個放在jsfiddle嗎? – Ben
當然,小提琴在這裏:http://jsfiddle.net/72fSd/ – Robert
完美。優勝者優勝者雞晚餐。 – Ben