2017-03-16 118 views
0

我正在使用 ember-select-2作为ember应用程序中的一个类型。问题是我可以从服务器获取数据,但数据未显示在下拉列表中任何帮助将不胜感激。提前感谢。在使用type-ahead与Ajax查询时使用type-ahead问题

{{select-2 
    placeholder="Choose from our many pizzas" 
    value=chosenTypeaheadPizza 
    typeaheadSearchingText="Searching pizzas" 
    typeaheadNoMatchesText="No pizzas found for '%@'" 
    typeaheadErrorText="Loading failed: %@" 
    query="queryPizzas" 
}} 

和行动处理器是

queryPizzas(query) {  
     var self = this; 
     var store = self.get('store'); 
     let adapter = store.adapterFor("pizzas"); 
     let serachQuery = query.term;  
      adapter.searchPizza(serachQuery).then(function(response) { 

       console.log(response.pizzas); 

      }); 
    }, 

响应

{ 
    "pizzas": [{ 
     "id": 1, 
     "name": "pizza 1" 
    }, { 
     "id": 2, 
     "name": "pizza 2" 
    }] 
    } 

回答

1

如果选中的examples余烬选-2;您可以看到它使用传递给动作处理程序的deferred参数来显示数据。它说:“确保不直接调用query.callback,但总是使用提供的延迟!”。这意味着,您需要调用deferred作为动作处理程序的第二个参数。我不是在余烬选-2,但你应该做的专家很可能是上述

queryPizzas(query, deferred) {  
    var self = this; 
    var store = self.get('store'); 
    let adapter = store.adapterFor("pizzas"); 
    let searchQuery = query.term;  
    adapter.searchPizza(searchQuery).then(function(data) { 
     //try to pass the array as the data 
     deferred.resolve({data: data.pizzas, more: false}); 
    }, deferred.reject); 
} 

提供的解决方案适用于您所提供的数据格式。请检查相应的twiddle。在这个例子中,我使用模拟承诺来模拟服务器远程调用,并返回您提供的示例数据作为要在select中显示的内容。您必须使用optionLabelPath才能在选择中显示比萨饼的名称,如application.hbs中所见。

+0

现在它在控制台中显示TypeError:无法读取undefined.i的属性'length'添加了响应数据。 – vivek

+0

@vivek正如我所说我从未使用过组件;但只给它一个尝试。我已经更新了有关您的回复数据的答案。你可以试试吗? – alptugd

+0

它仍然显示TypeError:无法读取未定义的属性“长度” – vivek