我有一个简单的应用程序设置,显示一个列表Projects.我已经删除了autopublish包,所以我不会将所有内容发送给客户端.
<template name="projectsIndex">
{{#each projects}}
{{name}}
{{/each}}
</template>
Run Code Online (Sandbox Code Playgroud)
当autopublish打开时,这将显示所有项目:
if Meteor.isClient
Template.projectsIndex.projects = Projects.find()
Run Code Online (Sandbox Code Playgroud)
删除后,我还要另外做:
if Meteor.isServer
Meteor.publish "projects", ->
Projects.find()
if Meteor.isClient
Meteor.subscribe "projects"
Template.projectsIndex.projects = Projects.find()
Run Code Online (Sandbox Code Playgroud)
那么,说客户端find()方法只搜索从服务器端发布的记录是否准确?它一直在绊倒我,因为我觉得我应该只打电话find()一次.
我在使客户端显示所有注册用户时遇到一些麻烦.std:accounts-ui包装包括在内.meteor/packages.autopublish包已被删除.
所有用户的数据都以Users.jsas的形式发布allUsers,而客户端allUsers则从createContainer提供的内部订阅该发布react-meteor-data.
但是,该页面仅呈现当前登录用户的详细信息.Meteor.users().find().fetch()在浏览器中运行JS控制台仅显示当前登录的用户,如果用户未登录则不显示任何内容.
console.log(Meteor.users.find().fetch()在服务器端运行正确输出所有用户.
为什么会在浏览器上发生这种情况?
/imports/api/Users.js
import { Meteor } from 'meteor/meteor';
if (Meteor.isServer) {
Meteor.publish('allUsers', function() {
return Meteor.users.find({});
})
}
Run Code Online (Sandbox Code Playgroud)
/imports/ui/App.jsx
import React, { Component, PropTypes } from 'react';
import { createContainer } from 'meteor/react-meteor-data';
import { Accounts } from 'meteor/std:accounts-ui';
import { Table } from 'react-bootstrap';
import User from './User';
export class App extends Component {
renderUsers() { …Run Code Online (Sandbox Code Playgroud) 在我收到此错误之前,我遇到了类似的问题:
模板助手中的异常:TypeError:无法读取未定义的属性"profile"
同样的事情再次发生,但是在第二个订单上,其中包含另一个用户配置文件信息(定义了第一个配置文件).我如何让它在{{#each orders}}中重新渲染?
当只有2个订单时,由于某种原因,似乎info.firstName,lastName和building被调用了3次...
在HTML中:
<template name="orderItem">
<section>
<form role="form" id="ordersList">
<div>
{{#each orders}}
<input type="text" name="name" value="{{info.firstName}} {{info.lastName}}">
{{/each}}
</div>
<div>
{{#each orders}}
<input type="text" name="building" value={{info.building}}>
{{/each}}
</div>
<div>
{{#each orders}}
<input type="text" name="featuredDish" value={{featuredDish}}>
{{/each}}
</div>
</form>
</section>
</template>
Run Code Online (Sandbox Code Playgroud)
在javascript中:
Template.orderItem.orders = function() {
var todaysDate = new Date();
return Orders.find({dateOrdered: {"$gte": todaysDate}});
};
Template.orderItem.info = function() {
var userId = this.userId;
var user = Meteor.users.findOne(userId)
var firstName = user.profile.firstName;
var lastName = user.profile.lastName;
var building …Run Code Online (Sandbox Code Playgroud)