This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LAUNCHXL-F28379D:GUI Composer:在 javascript 中从目标绑定到模型

Guru**** 2538460 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1565231/launchxl-f28379d-gui-composer-binding-in-javascript-from-target-to-model

器件型号:LAUNCHXL-F28379D


工具/软件:

我可以g_tempC在 GUI Composer 应用程序 v3 温度计小部件中成功显示来自微控制器的变量、该小部件的值属性绑定设置来自pmg_tempC。 我有第二个带 id tempor_1 的温度计小部件、我想显示华氏度。 为此、我无法让bindingRegistry示例正常工作:  

bindingRegistry.bind('widget.thermometer_1.value', 'streaming.g_tempC',
     value => { value*9/5 + 32; }, // getter: model -> target (C → F)
     value => { (value-32)*5/9; }  // setter: target -> model (F → C)
);

<script type="module" src="./app_0.js"></script> 在 index.gui 文件的顶部(实际上是第三行)、

我收到一条错误消息:“Binding stream.g_tempC not exist“(绑定流.g_tmpC 不存在)。 我也尝试过“pm.g_tempC"。“。 我要离开 手册中很少的示例。 那么,如何正确实现 bindingRegistry.bind 示例? 然后,我需要填写华氏温度计的值属性,并绑定到那里的东西吗? 我现在将其留空、否则不知道要在其中指定什么。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Erik、  

    示例中进行了详细说明

    、'treaming.g_tempC'

    应为  

    、'pm.g_tempC'

    这里提供了有关不同“数据模型“的更多信息:  

    4.2.目标编程—GUI Composer 入门

    4.2.目标编程—GUI Composer 入门

    PM ->程序模型:即一种数据模型、其中.out(即从 CCS 工程生成的符号)用作数据的“密钥“   

    Streaming ->通常用于串行通信(即 COM 或 UART)的流模型、很少有用于数据结构的内置方案(例如 JSON)、但也可以开发自定义协议解析器。  

    Transport+parser+data 模型的配置通过连接管理器 html 标记进行控制。 组件帮助中列出了一些示例

    GUI Composer 组件帮助

    但是、由于您有一个小工具可以正常工作、您很可能已经过了此步骤。 如果使用 bindRegistry.bind 方法,则应将构件属性页配置留空(这是您在图片中显示的内容)。 如果您创建了这两种绑定样式、则可能会有多个事件触发并导致问题。  

    似乎您尝试了 pm.g_tempC、这正是我预期的工作方式、那么语法可能存在问题。 我过去曾复制/粘贴过文本、JavaScript 解释器未正确解析某些字符。  

    我的建议是通过按“播放“按钮运行该应用程序,新选项卡应该打开,然后打开浏览器开发工具,然后尝试打开 (CTRL+SHIFT+P) app_0.js 如果浏览器开发工具找不到它,那么很可能会出现一些解析错误。 如果可以打开该文件、请尝试在 getter 函数上设置断点。 您可能需要将示例拆分为多行、以便更轻松地设置断点。 然后连接到硬件并查看是否遇到断点。 如果没有、我还会检查 Dev Tools 的“Console"选项“选项卡中是否有任何错误。  

    Martin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我能够调试并触发断点、但我不知道何时进行检查。 我不精通调试 Web 应用程序。 很奇怪,我没有得到一个错误,但温度计_2 只是显示 0。 我也可以看到 0 值调试。 我希望能确认任何'pm.g_tempC'也解决了,但是  

    此外,当我添加   bindingRegistry.bind('tempor_2.value','pm.g_tempC') 行时,所有数据都变为 blank/0。 要确认、这应该会起作用、对吧?

     ‘认为它是 XDS 通信的限制、而 bindingRegistry.bind(‘swidget.gc_widget_led.on '、' treaming.led_on ')的演示则使用流式传输? 顺便说一下、为什么该行的第一个参数中有前缀小工具?  

    调试时、我可以尝试执行任何特定操作吗?  

    顺便说一句,我已经在 另一个职位上重新表述了同样的问题,道歉的双重上升  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Erik、  

    我没有很注意启动文件,你用 javascript 创建绑定。 文件->新建->应用程序 javascript 的语法略过时(我将提交一个需要解决的 TT)。 但是、默认情况下、所有 v3 组件库项目都包含 index.js 文件。 它由 index.gui 文件自动包含、因此无需将其添加到该文件中。  

    index.js 具有更准确的模板、具有必要的内容函数和同步元素。 下面是一个代码片段,我用来确认我能够看到小部件更新到相同的变量,该变量是通过属性页绑定和使用 javascript 的程序绑定连接的。 在我的情况下、我创建的程序文件有一个“计数器“全局变量。 bindingregistry 调用是相同的,但有几个额外的函数调用(从等待开始),以确保数据模型完全初始化(小部件类型的数据模型类似于 pm)。  

    我为这种混乱而道歉。  

    Martin

    **/

    //示例代码:
    //
    (异步 ()=>{
    ///*等待小部件和目标模型准备就绪*/
    等待绑定 Registry.waitForModelReady ('widget');
    等待 bindingRegistry.waitForModelReady ('pm');
    //
    ///*基于简单表达式的简单计算值*/
    // bindingRegistry.bind('widget.id.propertyName'、“targetModelId.targetVariable ==1? '绑定是一个':'绑定不是一个');
    //
    ///*使用自定义 getter 和 setter 函数的自定义双向绑定*/
    ///*(setter 是可选的、getter 仅表示单向绑定)*/
    bindingRegistry.bind ('widget.tempor.value'、'pm.counter'、
    值=>{
    返回值*5/9+32;
    }、/* getter */
    值=>{
    return (value-32)*9/5;
    }/* setter */
    );
    //
    ///* 1 到 n 个绑定*/
    // bindingRegistry.bind ('widget.date.value'、{
    ///*在名称/值对中计算日期所需的依赖绑定*/
    //工作日:' widget.dayOfWeek.selectedLabel'、
    //天:“widget.dayOfMonth.value",“,</s>、
    //月:' widget.month.selectedLabel'
    //年:“widget.year.value"</s>“
    //}、
    ///*日期计算的 Getter */
    //函数(值){
    ///*计算并返回要绑定到小工具的字符串值、ID 为“date"*/“*/
    //返回 values.weekday +'、'+ values.month +''+ values.day +'、'+ values.year;
    //}
    //);
    })();