Mvvm 如何在不可编辑脚本未应用绑定的视图元素中复制数据绑定函数?

Mvvm 如何在不可编辑脚本未应用绑定的视图元素中复制数据绑定函数?,mvvm,knockout.js,Mvvm,Knockout.js,我是敲除的初学者,我在一个只有视图(称为模板)可编辑的平台上工作——视图模型不可编辑,甚至不可读(除了在开发工具中阅读最小化的代码) 我正在尝试将一个按钮从一个模板移动到另一个模板。但是,该按钮使用数据绑定函数,每个模板都应用了来自不同ViewModel(javascript文件)的绑定(使用元素Id) 看 迄今为止的想法 ⚡ 更改目标模板的主div的id是个坏主意 ⬜ 是否在div中使用与源模板相同的id包装新按钮 看来大家都认为重复的id是不好的 这两个视图模型会相互干扰吗 如果是这样

我是敲除的初学者,我在一个只有视图(称为模板)可编辑的平台上工作——视图模型不可编辑,甚至不可读(除了在开发工具中阅读最小化的代码)

我正在尝试将一个按钮从一个模板移动到另一个模板。但是,该按钮使用数据绑定函数,每个模板都应用了来自不同ViewModel(javascript文件)的绑定(使用元素Id)



迄今为止的想法

  • ⚡ 更改目标模板的主div的id是个坏主意

  • ⬜ 是否在div中使用与源模板相同的id包装新按钮

    • 看来大家都认为重复的id是不好的
    • 这两个视图模型会相互干扰吗
      如果是这样的话,是否只能为该新元素“暂停”或清除主元素
  • ⬜ 我是否应该尝试在目标模板中的
    标记中重新创建ViewModel的该部分

    • 这让人望而生畏,因为我不知道js和最小化的
      我在devtools中看到的文件很长,看起来并不简单
  • 还有别的吗


  • 谢谢。

    编辑:仅添加HTML按钮
    旧UI
    ,会显示一个按钮,但单击它不会执行任何操作。开发工具控制台在页面加载时出现错误(以及引用错误的
    jQuery.Deferred exception
    警告):

    未捕获引用错误:无法处理绑定“click:function(){return-toggleResponsiveDesign}” 消息:未定义toggleResponsiveDesign
     单击时(在parseBindingsString(CoreApp.js?v=v2011.0.1.1:394)时求值:3:58)
     在CoreApp.js?v=v2011.0.1.1:394
     初始时(CoreApp.js?v=v2011.0.1.1:394)
     初始时(CoreApp.js?v=v2011.0.1.1:394)
     在CoreApp.js?v=v2011.0.1.1:394
     在Object.G(CoreApp.js?v=v2011.0.1.1:394)
     在CoreApp.js?v=v2011.0.1.1:394
     在Object.D(CoreApp.js?v=v2011.0.1.1:394)
     在h(CoreApp.js?v=v2011.0.1.1:394)
     在l(CoreApp.js?v=v2011.0.1.1:394)


    根据您的屏幕截图,您可能可以让clickhandler工作,因为Userpersonalisationapp.js的viewmodel绑定到变量
    r
    ,您可以将headerapp模板中的按钮数据绑定更改为

    <button data-bind="click: r.toggleResponsiveDesign">
    

    我想试一试

    我认为这是办不到的。如果图形准确,则使用的是两个完全独立的ViewModel,它们之间没有任何连接或相互感知。如果viewmodels是嵌套的,那么从另一个访问其中一个将非常简单,但这里的情况似乎并非如此


    实际上,这就是我们的目的。通常,您会为整个应用程序调用一次
    applyBindings
    ,其余的将被划分为组件,这为您提供了一种在组件之间共享数据和方法的方法。你的应用程序目前的结构是无法做到的。这一点,以及你显然无法编辑甚至看不清楚viewmodels,真让我感到困惑。谁觉得这是个好主意?

    你有没有试着移动按钮?知道你们遇到什么错误会很有帮助。未捕获引用错误(无法处理绑定)。我在问题的末尾添加了全文。页面上是否加载了userPersonalisationApp.js?那是有机会的,但你必须表现出更多的能力it@johnSmith-加载时,问题是-它仅绑定到“userPersonalizationContainer”id(在UserDetailsPage.cshtml中定义)。所以(上面的想法#2)-如果我从UserDetailsPage(源模板)中删除该id并将其添加到主菜单(目标模板)中围绕按钮的div中,现在有2个.js文件绑定到同一个元素上——HeaderApp.js绑定到主div,UserPersonalizationApp.js绑定到按钮的div。我得到了以下错误:未捕获错误:不能对同一元素多次应用绑定。我将学习组件-谢谢!!是否(理论上)可以从原始ViewModel(UserPersonalizationApp.js)复制相关部分并将其粘贴到目标视图(MainMenu.cshtml)-例如,粘贴到我按钮上方的标记中?如果是这样,我如何将其绑定到按钮而不与整体ViewModel(HeaderApp.js)绑定冲突?
    <button data-bind="click: r.toggleResponsiveDesign()">