2

我正在尝试将typeahead与Parse.com结果一起使用。我认为Parse返回JSON对象,但似乎下面的方法不承认它。任何人都可以发现什么是错的?或者也许有更简单的方法使其工作(最后我希望能够搜索每个对象的两个字段)。Bootstrap Typeahead with Parse.com

据我得到这个(感谢这个:https://github.com/bassjobsen/Bootstrap-3-Typeahead):

function queryListy(){ 
    Parse.Cloud.run('queryList', {}, { 
     success: function(result) {  
      var $input = $('#query');  
      $input.typeahead({source:result, 
      autoSelect: true}); 
      $input.change(function() { 
       var current = $input.typeahead("getActive"); 
       if (current) { 
        // Some item from your model is active! 
        if (current.name == $input.val()) { 
         // This means the exact match is found. Use toLowerCase() if you want case insensitive match. 
        } else { 
         // This means it is only a partial match, you can either add a new item 
         // or take the active if you don't want new items 
        } 
       } else { 
        // Nothing is active so it is a new value (or maybe empty value) 
       } 
      }); 
     }, 
     error: function(error) { 
      console.log(error); 
      } 
    }); 
} 

当我把[{id: "someId1", name: "Display name 1"}, {id: "someId2", name: "Display name 2"}]而不是result其工作原理非常基本的机制似乎是正确的。

回答

2

解析不会以可直接使用的形式返回对象。你需要调用get在每次你需要财产:

var mappedObjects = []; 
result.forEach(function(parseObject){ 
    mappedObjects.push({ 
    id: parseObject.id, //id is special, you don't need get 
    name: parseObject.get("name"), //generic fields need get 
    }); 
}); 
$input.typeahead({source:mappedObjects, ... 

如果你愿意,你可以在你的云代码做这个映射,而不是让你的客户端代码并不需要。

+0

噢,这是伟大的决议!谢谢! –