2012-05-04 4 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가 선언 될 수 없다는 것입니다 내가 선택한 값.

솔직히 말해서, 이것은 내 모든 시간을두고 싸우고있는 한 가지 문제입니다. 컨트롤러에서 모델을 다시 생성하여 처리하고 있지만 아직 그 문제를 해결하지 않은 것을 잊어 버렸습니다.

이 값을 전혀 사용할 수 없으며 구조에서 동적으로 채워지는 방법이 있습니까?

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 구조는

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

또는

[34,]{catID = 12,14,18} 
나는 PARAMS 싶습니다

이다'는 이 문제를 해결할 방법이 있습니까?

많은 중첩 된 중첩 된 속성으로 작업하고 있는데이 부분을 단독으로 사용하면 훨씬 쉽게 작업 할 수 있습니다.한 가지 방법은 자바 스크립트로 이름을 업데이트하는 것이지만, (매우, 아주) 최후의 수단이라고 생각합니다.

+0

Daniel - 귀하의 질문에 답변하지 못해 죄송합니다. Stack Overflow 외부의 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

안녕하세요, Chris 님, 제 문제를 도와 주셔서 감사합니다. 제안 된 솔루션을 구현하기 시작했지만이 문제와 관련된 또 다른 문제가 있음을 알게되었습니다. 제 질문을 업데이트했습니다. – Daniel