0

これは、テンプレートの 1 つにあるものを簡略化したものです。

{{#each dataRecord}}

{{#if editingNow}}

  <tr class="dataRow">
    <td><button class="updateRecord" id="{{this._id}}">SAV</button></td>
    <td><input type="text" id="{{this._id}}" value="{{this.f}}"></td></td>
  </tr>

  {{else}}

  <tr class="dataRow">
    <td><button class="edit" id="{{this._id}}">EDIT</button></td>
    <td>{{this.f}}</td> 
    <td><button class="deleteRecord" id="{{this._id}}">DEL</button> </td>
  </tr>

{{/if}}

{{/each}}

editingNow は、false から始まるブール セッション変数の値を返します。そのため、ページが読み込まれると、ユーザーは各レコードの「f」フィールドの値と EDIT ボタンを確認できます。EDIT ボタンは、セッション変数を true に反転し、入力要素を使用してデータを表示します。ユーザーは、データを編集してボタンをクリックできます。このボタンは、SAVE ボタンになりました。このボタンは、_id を使用してレコードを更新し、セッション変数を false に戻します。

データの編集に関しては機能します。レコードは間違いなく更新されています。コンソールで値を確認すると、値が変更されていることがわかります。ただし、テーブルに表示されるデータは元の値に戻ります。そのフィールドに表示された変更がごく短時間表示された後、元に戻ります。さらに奇妙なことに、[編集] ボタンをもう一度クリックすると、テーブルにはまだ古い値が表示されます。そのフィールドで更新されたデータを表示する唯一の方法は、アプリを再起動することです。

この問題は、ローカルの mongo db を使用しているとき、または meteor.com のデータベースにリンクしているときは発生しませんでした。これは、アプリをmodulus.ioに移動してから発生し始めました. 何か案は?

更新 テンプレートのリアクティブ更新の問題の原因を突き止めることはできませんでしたが、Ethaan の助けを借りて、問題をよりよく理解し、回避策を見つけることができたので、回答を受け入れました。最終的にこれの底に到達します。

4

1 に答える 1

2

何かallow/deny問題を抱えているようですね?

試してみてください

Collection.allow({
 insert:function(){return true;},
 remove:function(){return true;},
 update:function(){return true;},
})

または、データベースとの接続が成功していることを確認し、モジュラスの管理パネルに移動します

オプション 2

データベースをクリーンアップし、サーバー側でダミーの挿入を行います。

最初に流星の殻を実行しmeteor resetます。

または、modulus.io にアプリケーションがある場合はmongo shell、 を使用し、このコードを使用します。

db.getCollectionNames().forEach(function(name) {
  if (name.indexOf('system.') === -1) {
    db.getCollection(name).drop();
  }
})

データベースがであることを確認したら、これをサーバー側に配置します。

//Server Code.
    Meteor.startup(function(){
      if(Collection.find().count() == 0){
        Collection.insert({serverInsert:"test from server"},function(err,result){
         if(!err){
          console.log("insert succefull")
        }
     })
    }
  })
于 2015-04-01T16:06:31.663 に答える