我有一些带有几个属性的组件,使用willRender钩子中的promise来尝试创建一个(分页)对象:
export default Ember.Component.extend({
pagination:null,
testing:null, // to check if this.set is ok within the promise!
willRender() {
let page = {};
let model = this.get('data');
model.get('products').then(relatedItems => {
let maxRecords = relatedItems.get('length');
relatedItems.forEach(function(item,index) {
if (item.get('slug') === itemModel.get('id')) {
if (index === 0) {
page.Prev = null;
page.Next = relatedItems.objectAt(index+1).get('slug');
}
else if (index+1 === maxRecords) {
page.Prev = relatedItems.objectAt(index-1).get('slug');
page.Next = null;
}
else {
page.Prev = relatedItems.objectAt(index-1).get('slug');
page.Next = relatedItems.objectAt(index+1).get('slug');
}
}
});
this.set('testing','hello world');
console.log(this.get('testing')); // hello world
this.set('pagination',page);
console.log(this.get('pagination')); // Object {Prev: "product-1", Next: "product-2"}
},reject => {
console.log('error '+reject);
});
}
})
在我的模板中
{{testing}} // prints hello world
但是,如果我尝试访问{{pagination}}例如{{log pagination}},则浏览器会崩溃并将对象打印出来并将对象打印到控制台。
我不知道我在哪里出错 - 任何帮助都非常感谢!
答案 0 :(得分:0)
尝试检查对象是否存在于特定位置。我认为它在for循环的迭代期间未定义。尝试确保在运行for循环期间ObjectAt没有返回undefined或null值。
<?php
//simply api
if(isset($_POST["submitmail"])){
if(strlen($_POST["mail"]) >= 5){
$api = file_get_contents("API_LINK");
if($api == "good"){
echo "<script>alert('Thanks');</script>";
}
}else{
echo "<script>alert('Try again');</script>";
}
}
?>
请确保Object at正在返回对象。
答案 1 :(得分:0)
您可能会触发模板重新渲染,导致willRender
一遍又一遍地触发,导致代码无限循环。
willRender
是执行此代码的非标准位置,init
将更加标准,因为它仅在组件初始化时触发。更好的是使用
myInit: Ember.on('init', function(){
....
})`
而不是覆盖对象上的willRender
。
答案 2 :(得分:0)
这里似乎有一些问题,有兴趣知道你的控制台错误是什么。
您似乎没有定义itemModel
,所以不知道您是如何引用它的。
此外,您无法在this
内访问.then
。您需要执行类似的操作来设置组件变量。
var _this = this;
promise().then(function(results) {
_this.set('testing', 'hello world');
});
答案 3 :(得分:-1)
<div data-role="popup" id="popup-info" data-theme="b" class="ui-content" >
<a href="#" data-rel="back" data-role="button" data-theme="a" data-icon="delete" data-iconpos="notext" class="ui-btn-left">Fermer</a>
<div id="content"></div>
</div>
<script>
(function($) {
$.widget( "mobile.popup", $.mobile.popup, {
setText: function(_text) {
container=this.element.find('div:first');
if(container!==undefined){
container.html(_text);
}else{
this.element.html(_text);
}
var newX = parseInt(($(window).width()-this._ui.container.width())/2);
var newY = parseInt(($(window).height()-this._ui.container.height())/2);
this.reposition( {x:newX,y:newY,positionTo:'window'} );
}
});
})(jQuery);
$('#popup-info').popup('setText',str);
</script>
之后你没有使用,
在测试属性之后应该testing:null
,
答案 4 :(得分:-1)
尝试在init
挂钩而不是willrender
挂钩
init() {
//you code
},