2017-11-08 11 views
0

私はデータベースで作業するためにSQLアダプタを使用しています。アップデートを処理する適切な方法は何ですか?AppNeteratorを使用してSQLデータベースの値を正しく更新するには?

questionid 1624のエントリのデータベースのsum_pointsフィールドに1ポイントが正しく追加されますが、エラーメッセージ(rs.fieldCount)も表示され、最後のconsole.logは実行されません

var fetchedTranslations = $.translationData; 
fetchedTranslations.fetch({ 
query: { statement: 'UPDATE "translationsCollection" SET "sum_points" = "sum_points" + ? WHERE "questionid" = ?', params: [1,1624] } //correctly changes the value but results in error message (rs.fieldCount) 
}); 
console.log("fetchedTranslations: " + JSON.stringify(fetchedTranslations)); 
} 

views.xml:(モデルフォルダ内)

<Alloy> 
<!--<Model src="translationsCollection"/>--> 
<Collection src="translationsCollection" instance="true" id="translationData"/> 
<Window id="learnQuestions" title="Learn"> 
<View id="learnQuestionContainer" layout="vertical" width="98%" borderWidth="2" borderRadius="5" backgroundColor="Alloy.CFG.design.backgroundColor" borderColor="#E6000000" height="98%"> 
    <View id="ratingBar" height="Ti.UI.SIZE" backgroundColor="orange" left="1%" width="98%"> 
     <Label id="pointsCounter" width="30%" left="30%" height="Ti.UI.SIZE" top="0" text="pointsCounter" onClick="calculatePoints" top="0"/> 
     <!-- calculatePoints triggers the points update function--> 
    </View> 
    <ScrollView id="learnQuestionsContainer" layout="vertical" height="Ti.UI.SIZE" dataCollection="$.translationData" dataTransform="transformFunction"> 
    </ScrollView> 
</View> 
</Window> 

trasnlationCollection.js

exports.definition = { 
config: { 
    columns: { 
     "questionid": "real", 
     "question": "text", 
     "answer": "text", 
     "difficulty": "real", 
     "language": "text", 
     "sum_points": "real", 
     "sum_words": "real" 
    }, 
    adapter: { 
     type: "sql", 
     collection_name: "translationsCollection", 
     idAttribute : "questionid" 
    } 
}, 
extendModel: function(Model) { 
    _.extend(Model.prototype, { 
     idAttribute : "questionid", 
     // extended functions and properties go here 
    }); 
    return Model; 
}, 

Scrollview内のラベルは、プログラムによって作成されます。

SOLUTION

を追加しました.xmlファイルでモデルのsrcとフェッチとルネのように値を設定するには、提案:

<Model src="translationsCollection"/> 

var fetchedTranslations = $.translationData; 
var model = fetchedTranslations.get('1624'); 
console.log("model fetched: " + JSON.stringify(model)); 
model.set({sum_points: model.get('sum_points') + 1}); 
model.save(); 

答えて

2

あなたは、コレクションやモデルを使用しているように見えるだけではなく、データベース。最も重要なことについては、クエリをまったく使用する必要はありません。モデルに関しては、関連するdocsを見てください。あなたのケースでは

は、単にコレクションがバックボーン基づいているので、あなたはどのように見ることができますので、私は、あまりにもbackbone docsをお調べください

var model = $.fetchedTranslations.get('123'); 
model.set({sum_points: model.get('sum_points') + 1}); 
model.save(); 

を(それらを得るために、または任意のバックボーン方式)適切なIDを持つモデルを得ま​​すあなたは、ID、フィルタなどの他のプロパティによって得ることができます

+0

清算をありがとう。このコードを試してみると、$ .translationData.get( '1624')は1624がquestionidのconsole.log出力のモデルとして定義されていません。questionidはアダプタとモデル(model.jsファイル)のidAttributeに設定されます。 – user24957

+0

どのようにコレクションを定義しましたか? '$ .'で参照していますが、通常はグローバルコレクションではなくインスタンスコレクションです。 –

+0

Iveはコレクションsrcを追加しました。モデルやコレクションの公式ドキュメントにかなり時間をかけました。残念ながら、一緒に働く方法を掴むのに苦労しているim。もっと便利なのは、次のようなドキュメントです:https://medium.com/all-titanium/enhancing-titanium-how-to-set-up-collections-with-databinding -39573cd30911;) – user24957

関連する問題