2014-10-31 30 views
2

以下方法删除包。问题是项目浏览器从不刷新。调用Repository.RefreshModelView(0)强制更新,但它重新打开模型并杀死脚本执行。项目浏览器未使用包删除脚本更新

这里是方法:

function clearPackage(pkg) { 
    var parent as EA.Package; 
    parent = Repository.GetPackageByID(pkg.ParentID); 

    var pkgList as EA.Collection; 
    pkgList = parent.Packages; 

    for (var i = 0; i < pkgList.Count; i++) { 
     var p as EA.Package; 
     p = pkgList.GetAt(i); 

     if (p.PackageGUID == pkg.PackageGUID) { 
      pkgList.Delete(i); 
      pkgList.Refresh(); 
      parent.Update(); // have tried with and without 
      return; 
     } 
    } 
} 

检查pkgList.Count前后pkgList.Refresh的确显示尺寸的变化。同样,这个问题似乎仅限于项目浏览器。

关于如何刷新项目浏览器的任何想法?

交叉贴在Sparx Forums

回答

3

要删除一个软件包,您只需要删除软件包本身。对不起,Perl的,但多数民众赞成我的驴:-)

my $p = $rep->GetTreeSelectedObject(); 
my $par = $rep->GetPackageByID ($p->ParentID); 
my $idx = 0; 
for my $sp (in $par->Packages) { 
    if ($sp->PackageID == $p->PackageID) { 
     $par->Packages->DeleteAt ($idx, 1); 
     last; 
    } 
    $idx++; 
} 
$rep->RefreshModelView ($par->PackageID); 
+0

谢谢,但我真的没有看到代码的区别(除了刷新父代),如果程序包挂在根目录下,它仍会重新加载整个模型。此外,DeleteAt似乎没有什么区别 - 第二个参数(刷新)被记录为未实现。 – Chris 2014-11-02 21:42:43

+0

第二个参数是强制性的(不使用 - 它是EA)。实际上它与Delete相同: -/ 关于在Refresh(0)处停止执行脚本,您应该发送一个错误报告。看起来不太好。由于我单独运行测试脚本,因此我并没有注意到这一点。 – 2014-11-03 07:01:54

+0

P.S.为了克服刷新问题,只需将标记推迟到整个脚本的末尾(或者按照Geert的建议)即可。如果您需要遍历已清除的子包列表,只需再次加载对象(使用GetPackageByID或-GUID)。在任何情况下,我从不使用刷新。这是一个最多余的方法。 – 2014-11-03 07:22:35

3

尝试

Repository.RefreshModelView(parent.PackageID); 

这将只刷新父包,而不是整个模型的内容。

+0

感谢您的建议,但这在我的案例中有点不切实际。我正在删除挂起根模型的包,因此parent.PackageID为0。 – Chris 2014-11-02 21:43:20

+0

@Chris在这种情况下,没有其他选择,然后重新加载整个模型。您可以考虑使用可执行文件或加载项来执行任务。这将避免当模型重新加载时脚本停止的问题 – 2014-11-03 06:49:19

+0

这是一个很好的建议。目前,我只是在处理EA弹出“潜在模型更改”的警告并继续。 – Chris 2014-11-03 14:11:06

相关问题