2016-10-20 4 views
0

Привет, ребята, так что я получил к шагу 9, следуя этому обучающую программу https://www.meteor.com/tutorials/react/security-with-methodsМетеор Реагировать Учебник Прогнозной строку, есть объект

Так я написал все методы с их проверкой, однако я получаю ошибки как исключение при вызове методы «задач .remove»ошибка: матч ошибка: ожидается строка, есть объект

Вот мои письменные коды Это является tasks.js

import { Meteor } from 'meteor/meteor' 
import { Mongo } from 'meteor/mongo' 
import { check } from 'meteor/check' 

export const Tasks = new Mongo.Collection('tasks') 

Meteor.methods({ 
    'tasks.insert' (text) { 
    check(text, String) 

    // Make sure the user is logged in before insterting a task 
    if (!this.userId) { 
     throw new Meteor.Error('not-authorized') 
    } 

    Tasks.insert({ 
     text, 
     createdAt: new Date(), 
     owner: this.userId, 
     username: Meteor.users.findOne(this.userId).username 
    }) 
    }, // tasks.insert 
    'tasks.remove' (taskId) { 
    check(taskId, String) 

    Tasks.remove(taskId) 
    }, 
    'tasks.setChecked' (taskId, setChecked) { 
    check(taskId, String) 
    check(setChecked, Boolean) 

    Tasks.update(taskId, { $set: { checked: setChecked } }) 
    } 
}) 

И это Task.jsx

import React, { Component, PropTypes } from 'react' 
import { Meteor } from 'meteor/meteor' 
// import { Tasks } from '../api/tasks.js' 

// Task component - represents a single todo item 
export default class Task extends Component { 
toggleChecked() { 
    // Set the checked value to the opposite of its current value 
    Meteor.call('tasks.setChecked',this.props.task._id, !this.props.task.checked) 
} 

deleteThisTask() { 
    Meteor.call('tasks.remove', this.props.task._id) 
} 
    render() { 
    // Give tasks a different className when they are checked off, 
    // so that we can style them nicely 
    const taskClassName = this.props.task.checked ? 'checked' : '' 
    return (
     <li className={taskClassName}> 
     <button className="delete" onClick={this.deleteThisTask.bind(this)}> 
      &times; 
     </button> 

     <input 
      type="checkbox" 
      readOnly 
      checked={this.props.task.checked} 
      onClick={this.toggleChecked.bind(this)} 
     /> 

     <span className="text"> 
      <strong>{this.props.task.username}</strong>:{this.props.task.text} 
     </span> 
     </li> 
    ) 
    } 
} 

Task.propTypes = { 
    // This component gets the task to dipslay through a React prop. 
    // We can use propTypes to indicate it is required 
    task: PropTypes.object.isRequired 
} 

В чем проблема с тем, что мой письменный код идентичен коду учебников, почему же я получаю эти ошибки? Я получил ту же ошибку для метода обновления.

EDIT: После того, комментируя проверки и делать более поздние этапы урока, а затем позволяя проверку заставляет их работать ... но я не уверен, какая часть из них работать

+0

В 'tasks.remove' '' функции (TaskId) '', вы можете сделать console.log (TaskId) и посмотрите, действительно ли вы получаете объект? Кроме того, где этот '' 'taskId''' входит в контекст? – blueren

+0

См. [Мой ответ] (http://stackoverflow.com/a/40154329/5978355) –

+0

@DzhakharUkhaev в конце учебника он работает с проверкой (taskId, String), и если я изменю его на объект, который я получаю противоположная ошибка, которую ожидает строка –

ответ

0

check функции ожидая String, потому что вы прошли String в качестве параметра для проверки. Но ваш компонент React Task ожидает Object.

Task.propTypes = { 
    task: PropTypes.object.isRequired 
} 

Просто попробуйте

'tasks.remove' (taskId) { 
    check(taskId, Object) 

    Tasks.remove(taskId) 
}, 

вместо

'tasks.remove' (taskId) { 
    check(taskId, String) 

    Tasks.remove(taskId) 
    }, 
Смежные вопросы