【问题标题】:cfwheels - updating nested properties with a composite key tablecfwheels - 使用复合键表更新嵌套属性
【发布时间】:2012-05-04 21:08:46
【问题描述】:

我正在尝试使用更好的设置来更新具有嵌套属性的模型。

现在在我的编辑视图中,我手动定义 textFieldTag 以通过将名称设置为 "myModel[myNestedProperty][#modelID#,#key2id#][name]" 来创建 params 结构

正在更新中...

如果我只使用myModel.update(params.myModel),如果有任何需要删除的元素,我将无法使更新生效

所以我销毁了与 myModel 具有相同 id 的嵌套属性的所有模型,在这种情况下它可以工作。

缺点是如果更新失败,嵌套的属性都没有了。

我尝试在删除它们之前先获取所有模型并.saveing 它们,但由于某种原因这不起作用。

看起来 cfwheel 是为这种与复选框的关系设置的,但我需要它来处理文本字段并在我的表单中选择项目。


更新

我意识到我还有另一个问题。本质上,我想对此进行扩展,以便能够在多个嵌套属性和关系中使用它。

问题在于我为选择下拉菜单设置名称的方式:

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

问题是无法声明第二个 id,因为它将被分配为 id 而不是使用我选择的值。

说实话,这是我一直在努力解决的一个问题。我通过在控制器中重新生成模型来处理它,我只是忘记了我还没有解决这个问题。

有没有办法让这些值根本不被使用,并从结构中动态填充它们?

假设我有(截断)一个名称 tcat[34,0][catID]tcat[34,][catID],(其中 catID 应该是第二个 ID)。

生成的参数的 tcat 结构是

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

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

我希望参数的 tcat 结构具有多个结构,例如:

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

有没有办法解决这个问题?

我正在处理许多复合键嵌套属性,如果我可以让这部分单独工作,它会变得容易得多。我知道一种方法是使用 javascript 更新名称,但我认为这将是(非常非常)最后的手段。

【问题讨论】:

  • Daniel - 很抱歉您的问题尚未得到解答。我会联系 Stack Overflow 之外的一个 CF Wheels 人,看看我能否让他给出提示。不过,您的问题相当复杂:)
  • 用户如何指示删除?通过复选框?你用的是什么界面元素?需要更多关于您的具体情况的示例。
  • 如果字段留空EQ '',则不添加

标签: coldfusion composite-key cfwheels


【解决方案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>

我会继续编辑我的答案,直到我们找到解决方案。希望这能给您一个良好的开端。

【讨论】:

  • 嗨,克里斯,感谢您帮助我解决我的问题。我开始实施建议的解决方案,但事实证明我在这个问题之前还有另一个相关问题,我已经更新了我的问题。
猜你喜欢
  • 2015-08-20
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多