zlgopen / awtk-mvvm

Model-View-ViewModel for AWTK
GNU Lesser General Public License v2.1
86 stars 28 forks source link

关于列表渲染的一些疑问 #55

Open Tracker647 opened 3 months ago

Tracker647 commented 3 months ago

我打算实现一个逻辑,这个逻辑打开一个中转页面,中转页面有六个按钮通向不同的菜单页面。 菜单页面除了菜单名,左侧的tab按钮(实际上是单选按钮,逻辑原因不想自动切界面只能用单选)列表和菜单列表项不同以外,布局均相同。我现在的疑问是: 1.我找了一遍demo,好像view_model只能用来渲染一个view_model的数组?还是有办法多个?我打算在菜单的model分别对左侧tab按钮和右侧菜单item做列表渲染。 2.view_model能不能用来渲染原生类型的数组(如字符串,int),还是必须先建一个model? 3.菜单样式局部复杂多变,没法定制化,因此这部分我是用component完成的,我想的是用列表渲染动态传入component的xml名,将菜单item一个个渲染出来,但我不知道component能不能做到这点。 4.component的本质就是include文本替换,没法传参或者组件间通信,看起来还是不灵活,未来有没有进一步扩展component的计划?

一个可能的view和model伪代码(model懒得注释了): menu.xml

<view name="view_top" h="55" w="100%" x="r:0" y="0">
    <label name="1bl_menu_tag" w="155" children_layout="default(r=1,c=0)" h="54" x="10" y="0">
        <button name="back_arrow" on:click="back()" w="31" style="menu_back" />
        <label name="1bl_menu_name" v-data:text="{menu_title}" style:normal:border_color="#00000000" w="124" />
    </label>
</view>
<view name="view_left" w="25%" style:normal:border_color="#264D6B" children_layout="default(r=0,c=1,xm=10,ym=10,s=10)" x="0" y="55" h="100%">
    <radio_button v-for="rbtn_items" name="{rbtn_items.name}" h="7o" style="tab_onwa" value="true" on:click="{rbtn_items. func}" text="Range" />
</view>
<list_view name="view_right" x="r:0" y="55" w="75%" h="100%" default_item_height="60">
    <scroll_view name="scroll_view" h="100%" yslidable="true" children_layout="list_view(xm=20)">
        <?include v-for="setting_items" filename="{setting_items.name}" ?> 
    </scroll_view>
    <scroll_bar_d name=" scroll_bar" x=" r" y=" 0" w=" o" h=" 0" animatable=" true"/>
</list_view> 

menu.h

#ifndef MENU_H
#define MENU_H
#include "awtk.h"
#include "tkc/types_def.h"
#include "tkc/str.h"
#include "mvvm/base/navigator_request.h"

BEGIN_C_DECLS
/**
 * @class menu_t
 * @annotation ["collection:{..}","model"]
 * menu model
 */
typedef struct _menu_t {
    str_t menu_title;
    darray_t rbtn_list;
    darray_t settings_list;
    /* private */
    navigator_request_t *req;
} menu_t;

END_C_DECLS

效果图: image

xianjimli commented 3 months ago

你在群里问下吧,其他同事对MVVM了些扩展,有些功能我没太关注。

xianjimli commented 3 months ago

一次最好只问一个问题,多了看得太累。

Tracker647 commented 3 months ago

好吧 会注意的 谢谢😅