3

ネストされたプロパティを持つモデルを更新するために、より良いセットアップを機能させようとしています。

現在、編集ビューでtextFieldTagを手動で定義し、名前を次のように設定してparams構造体を作成しています。"myModel[myNestedProperty][#modelID#,#key2id#][name]"

更新アクション中..。

使用するだけmyModel.update(params.myModel)では、削除が必要な要素がある場合、更新を機能させることができません

そのため、myModelと同じIDを持つネストされたプロパティのすべてのモデルを破棄します。この場合、それは機能します。

欠点は、更新が失敗した場合、ネストされたプロパティがすべて失われることです。

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

cfwheelはチェックボックスとのこの種の関係のために設定されているように見えますが、テキストフィールドを操作してフォーム内の項目を選択するには、cfwheelが必要です。


アップデート

私は別の問題があることに気づきました。基本的に、これを拡張して、複数のネストされたプロパティと関係で使用できるようにしたいと思います。

問題は、特に一部のドロップダウンの名前を設定する方法にあります。

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

問題は、2番目のIDは、選択した値を使用するのではなくIDとして割り当てられるため、宣言できないことです。

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

これらの値をまったく使用せず、構造から動的に入力する方法はありますか?

tcat[34,0][catID]名前またはtcat[34,][catID]、(catIDは2番目のIDである必要があります)を(切り捨てて)持っているとしましょう。

生成されるparamsのtcat構造は

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

また

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

paramsのtcat構造体に次のような複数の構造体を持たせたいのですが。

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

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

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

4

1 に答える 1

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>

解決策が見つかるまで、答えを編集し続けます。うまくいけば、それはあなたに良いスタートを与えるでしょう。

于 2012-05-18T13:04:02.797 に答える