meteor - 如何从 Meteor 集合中创建 react 数组?

标签 meteor

我想将集合中的项目名称列表作为一个简单的数组用于自动完成用户输入和检查重复项等操作。我希望此列表具有反应性,以便数据的更改将反射(reflect)在数组中。我根据 Meteor 文档尝试了以下方法:

    setReactiveArray = (objName, Collection, field) ->
        update = ->
          context = new Meteor.deps.Context()
          context.on_invalidate update
          context.run -> 
            list = Collection.find({},{field: 1}).fetch()
            myapp[objName] = _(list).pluck field
        update()

    Meteor.startup ->
        if not app.items?
            setReactiveArray('items', Items, 'name')

    #set autocomplete using the array
    Template.myForm.set_typeahead =  ->
       Meteor.defer ->
        $('[name="item"]').typeahead {source: app.items}    

此代码似乎有效,但它会缩短我的应用程序的加载时间(在 dev/localhost 上加载需要 5-10 秒,而没有此代码则需要约 1 秒)。难道我做错了什么?有没有更好的方法来实现这一点?

最佳答案

您应该可以使用 Items.find({},{name: 1}).fetch() ,它将返回一个项目数组并且是响应式(Reactive)的,因此只要查询结果发生变化,只要在响应式(Reactive)上下文中调用它,它就会重新运行其封闭函数。

对于Template.myForm.set_typeahead助手,您可能希望在助手本身内部调用该查询,将结果存储在局部变量中,然后调用 Meteor.defer使用引用该变量的函数。否则,我不确定查询在被调用时是否会在响应式(Reactive)上下文中。

关于meteor - 如何从 Meteor 集合中创建 react 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12011224/

相关文章:

javascript - 关闭模式后灰色背景仍然存在

meteor - 如何在meteor.com 上的Meteor 应用程序中部署节点模块?

javascript - 如何在 Meteor 中显示 "static"html 页面?

meteor - 使用 React 在 Meteor 中 createContainer 是做什么的?

angularjs - Angular 在 angular.bootstrap 之后添加模块

mongodb - meteor 数据库连接

meteor - 如何将 Facebook 的 Open Graph 集成到 Meteor 应用程序中?

javascript - 将对象作为身份证件插入 mongodb

haml - meteor 与haml

node.js - 图像未在 meteor 中渲染