2012-05-04 2 views
3

ネストされたプロパティを持つモデルを更新するためのより良い設定をしようとしています。cfwheels - 複合キーテーブルを使用してネストされたプロパティを更新する

今の私の編集ビューで、私はちょうど私ができない myModel.update(params.myModel)を使用する場合は、手動 "myModel[myNestedProperty][#modelID#,#key2id#][name]"更新アクションで

として名を設定してのparams構造体...

を作成するtextFieldTagを定義

削除が必要な要素がある場合に更新を取得する

したがって、myModelと同じIDを持つネストされたプロパティのすべてのモデルを破棄します。

更新が失敗した場合、ネストされたプロパティはすべて削除されるという欠点があります。

削除する前にすべてのモデルを最初に取得しようとしましたが、.saveを送信していますが、何らかの理由でそれが機能していません。

cfwheelはチェックボックスとのこの種の関係に設定されているようですが、私はそれをテキストフィールドと組み合わせて自分のフォームのアイテムを選択する必要があります。


更新

私は、私は別の問題を持って実現。基本的には、複数のネストされたプロパティーやリレーションシップで使用できるように、これを拡張したいと考えています。

問題は、選択のドロップダウンの名前、特に双方向Iのセットアップである:

name="myModel[myNestedProperty][#modelID#, ][nestedID]"

問題は、それが使用するのではなく、IDとして割り当てられますので、第2のIDは、宣言することはできませんということです私が選択した値

正直言って、これは私がずっと戦ってきた1つの問題です。私はコントローラーのモデルを再生成することでそれを扱っていますが、私はまだその問題を解決していないことを忘れています。

これらの値をまったく使用しないようにする方法はありますか?それらを構造から動的に取り込む方法はありますか?

名前がtcat[34,0][catID]またはtcat[34,][catID](ここでcatIDは2番目のID)であるとします。

[34,12]{tID = 34; catID = 12} 
[34,14]{tID = 34; catID = 14} 
[34,18]{tID = 34; catID = 18} 

のparamsのように複数の構造体を持つようにTCAT構造生成されますTCAT構造は、私がのparamsたい

[34,0]{catID = 12,14,18} 

または

[34,]{catID = 12,14,18} 

はをこれを回避する方法はありますか?

私は複合キーのネストされたプロパティをたくさん使用しています。この部分だけを動作させるともっと簡単になります。私は1つの方法は、javascriptで名前を更新することです知っているが、私はそれが(非常に、非常に)最後の手段だろうと思う。

+0

ダニエル - あなたの質問にはまだ答えがありません。私はスタックオーバーフローの外のCF Wheelsの人に手を差し伸べて、ヒントで彼をチップに入れることができるかどうかを見ます。あなたの質問はかなり複雑です:) –

+0

ユーザーはどのように削除を示していますか?チェックボックスを使用しますか?どのインタフェース要素を使用していますか?あなたの正確な状況の例がさらに必要です。 –

+0

フィールドがブランクのままになっている場合は 'EQ' ''それは追加されません – Daniel

答えて

1

これは試してもらえますか?

親モデルでnameが空白かどうかをチェックし、空白の場合は削除フラグを設定するコールバックを設定します。

<cffunction name="init"> 
    ... 

    <!--- This could also be `beforeValidation` if you want to make `name` required for the child model ---> 
    <cfset beforeSave("$provisionMyNestedProperty")> 
</cffunction> 

<cffunction name="$provisionMyNestedProperty"> 
    <cfscript> 
     if (StructKeyExists(this, "myNestedProperty") && IsArray(this.myNestedProperty)) 
     { 
      for (local.i = 1; local.i <= ArrayLen(this.myNestedProperty); local.i++) 
      { 
       if (!StructKeyExists(this.myNestedProperty[local.i], "name") || !Len(Trim(this.myNestedProperty[local.i].name))) 
        this.myNestedProperty[local.i]._delete = true; 
      } 
     } 
    </cfscript> 
</cffunction> 

解決策を打ち出すまで私は答えを編集し続けます。うまくいけばそれはあなたに良いスタートを与える。

+0

こんにちはクリス、私の問題を手伝ってくれてありがとう。私は提案されたソリューションを実装し始めましたが、これに先行する別の関連する問題があることが判明しました。私は質問を更新しました。 – Daniel

関連する問題