Silverlight的Data Bindings:Silverlight 與 ASP.NET Ajax

ASP.NET前后端用户安全管理技术全解析 本文系统介绍ASP.NET Core中用户管理的核心技术,涵盖注册登录、密码加密(PBKDF2)、JWT身份认证及AccessToken/RefreshToken机制。通过轻量级Web API项目演示,强调安全实践:密码明文不存储,使用加盐哈希;登录后生成带有效期的JWT令牌,结合短时效AccessToken与安全存储的RefreshToken实现无状态身份验证,提升系统安全性与用户体验。 阅读详情

不可否認,對於網頁美工人員或是動畫設計師而言,Silverlight提供了Flash以外的一個畫布,令她們可盡情揮灑創意!但對於設計師而言,Silverlight如何結合資料庫來呈現資料則是更具吸引力的課題,很明顯的!Silverlight 1.0 RC與Silverlight 1.1並不支援Data Binding機制,而且目前對於中文顯示仍存在著問題(下載字型不算是個解法,因為有法律問題),不過如果這個問題獲得解決,Silverlight結合資料庫後所呈現的效果,相信會給客戶完全不同的網頁操作感受,當然!前提得要Silverlight支援Data Bindings,否則一切都是紙上談兵罷了。要令Silverlight支援Data Bindings說來也不難,只要處理幾個關鍵問題即可。一、資料提供者為何?ASP.NET Ajax的PageMethods/Web Service可以勝任此工作,如下列程式片段所示。

private static DataTable BuildDataCache()
    {
        if (HttpRuntime.Cache["DataCache_Employees"] != null)
            return HttpRuntime.Cache["DataCache_Employees"] as DataTable;
        else
        {
            using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[
"NorthwindConnectionString"].ConnectionString))
            {
                SqlDataAdapter adapter = new SqlDataAdapter(
"SELECT * FROM Employees ORDER BY EmployeeID", conn);
                DataTable table = new DataTable("Employees");
                adapter.Fill(table);
                HttpRuntime.Cache["DataCache_Employees"] = table;
                return table;
            }
        }
    }
 
    [WebMethod]
    public static Employee GetData(int index)
    {
        DataTable table = BuildDataCache();
        return new Employee(table.DefaultView[index]);
    }
 
    [WebMethod]
    public static int GetCount()
    {
        DataTable table = BuildDataCache();
        return table.DefaultView.Count;
    }
 
    protected void Button1_Click(object sender, EventArgs e)
    {
    }
}
 
[Serializable]
public class Employee
{
    [NonSerialized]
    private DataRowView _rv = null;
 
    public string EmployeeID
    {
        get
        {
            return (_rv.Row.IsNull("EmployeeID") ? string.Empty : _rv["EmployeeID"].ToString());
        }
    }
 
    public string LastName
    {
        get
        {
            return (_rv.Row.IsNull("LastName") ? string.Empty : (string)_rv["LastName"]);
        }
    }
 
    public string FirstName
    {
        get
        {
            return (_rv.Row.IsNull("FirstName") ? string.Empty : (string)_rv["FirstName"]);
        }
    }
 
    public string Title
    {
        get
        {
            return (_rv.Row.IsNull("Title") ? string.Empty : (string)_rv["Title"]);
        }
    }
 
    public string HireDate
    {
        get
        {
            return (_rv.Row.IsNull("HireDate") ?
string.Empty : ((DateTime)_rv["HireDate"]).ToShortDateString());
        }
    }
 
    public Employee(DataRowView rv)
    {
        _rv = rv;
    }
}
運用ASP.NET Ajax及JSON,我們可以輕易的用JavaScript來取得資料庫的資料,接著只要將資料設定給指定Silverlight控制項即可,這個工作可以簡單化也可以複雜化,簡單的作法是直接在JavaScript以findName來取得控制項,然後一一設定其屬性值。

handleLoad: function(plugIn, userContext, rootElement)
{
           this.plugIn = plugIn;
           this.dataContext = rootElement.children.getItem(0);
           PageMethods.GetCount(this.OnSucceeded,this.OnFailed,this);
           this.receiveData(this.currentDataIndex);
},
OnSucceeded: function(result, userContext, methodName)
{
      if (methodName == "GetData")
      {
          userContext.displayData(result);
      }
      else if(methodName == "GetCount")
          userContext.recordCount = result;
},         
OnFailed:function(error, userContext, methodName)
{
       if(error !== null)
       {
          alert(error.get_message());
       }
},
displayData: function(data)
{
      var idCtrl = this.dataContext.findName('txtEmployeeID');
       var firstNameCtrl = this.dataContext.findName('txtLastName');
       var lastNameCtrl = this.dataContext.findName('txtFirstName');
       var titleCtrl = this.dataContext.findName('txtTitle');
       var hireDateCtrl = this.dataContext.findName('txtHireDate');
       var imgCtrl = this.dataContext.findName("imgPhoto");
       idCtrl.text = data.EmployeeID;
       firstNameCtrl.text = data.FirstName;
       lastNameCtrl.text = data.LastName;
       titleCtrl.text = data.Title;
       hireDateCtrl.text = data.HireDate;
       imgCtrl.source = "Default.aspx?ID="+idCtrl.text;
       this.dataContext.findName("imgAnimation").begin();
}
這種做法的缺點是設計師得用JavaScript寫下許多程式碼。另一種做法是利用Silverlight控制項的Tag屬性,指定Binding Expression,然後於JavaScript中巡覽她們來一一指定值,如下列片段所示。

<Canvasxmlns="http://schemas.microsoft.com/client/2007"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
     <CanvasName="DataDemo"Height="600"Width="800"Tag="BindingContext:GetData,GetCount">
           <Canvas.Background>
                <LinearGradientBrush>
                     <GradientStopColor="Yellow"Offset="0.0" />
                     <GradientStopColor="Orange"Offset="0.5" />
                     <GradientStopColor="Red"Offset="1.0" />
                </LinearGradientBrush>
           </Canvas.Background>
           <TextBlockTag="BindingField:EmployeeID;BindingProperty:Text"Name="txtEmployeeID"Width="144"Height="24"Canvas.Left="166"Canvas.Top="23"Text="A00001"TextWrapping="Wrap"/>
           <TextBlockTag="BindingField:LastName;BindingProperty:Text"Name="txtLastName"Width="320"Height="24"Canvas.Left="500"Canvas.Top="23"Text="Alean Company"TextWrapping="Wrap"/>
           <TextBlockTag="BindingField:FirstName;BindingProperty:Text"Name="txtFirstName"Width="320"Height="24"Canvas.Left="166"Canvas.Top="72"Text="Jeffray"TextWrapping="Wrap"/>
           <TextBlockTag="BindingField:Title;BindingProperty:Text"Name="txtTitle"Width="576"Height="24"Canvas.Left="166"Canvas.Top="122"Text="Taipen 101"TextWrapping="Wrap"/>
           <TextBlockTag="BindingField:HireDate;BindingProperty:Text"Name="txtHireDate"Width="576"Height="24"Canvas.Left="166"Canvas.Top="171"Text="2005/3/4"TextWrapping="Wrap"/>
           <ImageName="imgPhoto" Tag="BindingField:EmployeeID;BindingProperty:Source;Format:Default.aspx?ID={0}"Width="357"Height="206"Canvas.Left="400"Canvas.Top="301">
                <Image.Triggers>
                     <EventTriggerRoutedEvent="Image.Loaded">
                           <BeginStoryboard>
                                <StoryboardName="imgAnimation">
                                     <DoubleAnimation
                                      Storyboard.TargetName="imgPhoto"
                                      Storyboard.TargetProperty="Opacity"
                                      From="0.0"To="1.0"Duration="0:0:6"/>
                                </Storyboard>
                           </BeginStoryboard>
                     </EventTrigger>
                </Image.Triggers>
           </Image>
           <TextBlockName="txtLabel1"Width="114"Height="24"Canvas.Left="18"Canvas.Top="23"Text="Employee ID:"TextWrapping="Wrap"/>
           <TextBlockName="txtLabel1_Copy"Width="120"Height="24"Canvas.Left="349"Canvas.Top="23"Text="Last Name:"TextWrapping="Wrap"/>
           <TextBlockName="txtLabel1_Copy1"Width="130"Height="24"Canvas.Left="18"Canvas.Top="72"Text="First Name:"TextWrapping="Wrap"/>
           <TextBlockName="txtLabel1_Copy2"Width="104"Height="24"Canvas.Left="18"Canvas.Top="122"Text="Title :"TextWrapping="Wrap"/>
           <TextBlockName="txtLabel1_Copy3"Width="93"Height="24"Canvas.Left="18"Canvas.Top="171"Text="Hire Date:"TextWrapping="Wrap"/>
     </Canvas>
</Canvas>
那如何解析Tag的Binding Expression並指定值呢?答案是利用Silverlight的JavaScript支援,一一巡覽所有控制項,一一解析Tag,然後再指定值。

/////////////////////////////////////////////////////////////////////////
// Silverlight Data Binding Helper 0.1
/////////////////////////////////////////////////////////////////////////
 
if (!window.SilverlightBinding)
     window.SilverlightBinding = {};
 
SilverlightBinding.BindingData = function(ctrl,bindingExpression)
{
   var bindings = bindingExpression.split(';');
   this.bindingComplete = false;
   this.ctrl = ctrl;
   for(var i = 0; i < bindings.length; i++)
   {
      var temp = bindings[i].split(':');
      if(temp.length != 2)
      {
         this.bindingComplete = false;
         return;
      }
      if(temp[0] == 'BindingField')
         this.bindingField = temp[1];
      else if(temp[0] == 'BindingProperty')
         this.bindingProperty = temp[1];
      else if(temp[0] == 'Format')
         this.format = temp[1];  
   }
   this.bindingComplete = true;
}
 
SilverlightBinding.BindingData.prototype =
{
   updateValue : function(dataItem)
   {
      if(this.bindingComplete)
      {
        if(this.format)
           eval('this.ctrl.'+this.bindingProperty+
" = this.format.replace('{0}',dataItem."+this.bindingField+');');
        else
           eval('this.ctrl.'+this.bindingProperty+' = dataItem.'+this.bindingField+';');
      }
   }
}
 
SilverlightBinding.BindingContext = function(bindingContainer)
{
   var parseBinding = bindingContainer.tag.split(':');
   this.bindingComplete = false;
   this.bindingContainer = bindingContainer;
   this.bindingControls = new Array();
   this.currentDataIndex = 0;
   this.recordCount = 0;
   if(parseBinding.length == 2 && parseBinding[0] == "BindingContext")
   {
      var bindingMethods = parseBinding[1].split(',');
      if(bindingMethods.length == 2)
      {
         this.bindingMethod = bindingMethods[0];
         this.bindingCountMethod = bindingMethods[1];
         this.bindingComplete = true;
      }
   }
   if(!this.bindingComplete) alert('ERROR,Binding Failed.');
}
 
SilverlightBinding.BindingContext.prototype =
{
   _childWorker : function(parent,parseParent)
   {
     if(parent.tag && parent.tag != '')
     {
        if(parseParent)
        {
          var bindingData = new SilverlightBinding.BindingData(parent,parent.tag);
          if(bindingData.bindingComplete)
          {
             this.bindingControls.length++;
             this.bindingControls[this.bindingControls.length-1] = bindingData;
          }
          else
            delete bindingData;
        }
        try
        {
           var temp = parent.children;
        }
        catch(err)
        {
           return;
        }
        for(var i = 0; i < parent.children.count; i++)
            this._childWorker(parent.children.getItem(i),true);
     }  
   },
   initialize:function()
   {
     this._childWorker(this.bindingContainer,false); 
     this._receiveCount();  
     this._receiveData(0);              
   },
   OnSucceeded: function(result, userContext, methodName)
    {
       if (methodName == userContext.bindingMethod)
       {             
           for(var i = 0; i < userContext.bindingControls.length; i++)
               userContext.bindingControls[i].updateValue(result);
       }
       else if(methodName == userContext.bindingCountMethod)
           userContext.recordCount = result;
    },         
    OnFailed:function(error, userContext, methodName)
    {
       if(error !== null)
       {
          alert(error.get_message());
       }
    },
    _receiveData: function(index)
    {
        eval('PageMethods.'+this.bindingMethod+
'(index,this.OnSucceeded,this.OnFailed,this);');
    },
    _receiveCount: function()
    {
        eval('PageMethods.'+this.bindingCountMethod+
'(this.OnSucceeded,this.OnFailed,this);');
    },
    next:function()
    {
        if(this.currentDataIndex+1 >= this.recordCount)
           return;
        this._receiveData(++this.currentDataIndex);
    },
    prev:function()
    {
        if(this.currentDataIndex -1 < 0)
           return;
        this._receiveData(--this.currentDataIndex);
    }
}
使用此JavaScript物件的方法很簡單,只要於handleLoad中建立此物件,然後將Silverlight的根控制項傳入即可。

handleLoad: function(plugIn, userContext, rootElement)
{
           this.plugIn = plugIn;
           this.dataContext = rootElement.children.getItem(0);
           this.bindingContext =
new SilverlightBinding.BindingContext(rootElement.children.getItem(0));
           this.bindingContext.initialize();
}
切換上下筆時也很簡單。

function Next()
{
   window.Silverlight.current_DataContext.bindingContext.next();
   window.Silverlight.current_DataContext.dataContext.findName("imgAnimation").begin();
}
 
function Prev()
{
   window.Silverlight.current_DataContext.bindingContext.prev();
   window.Silverlight.current_DataContext.dataContext.findName("imgAnimation").begin();
}

 

 

看不到炫麗效果啊?哈~~~我承認,我的美工細胞粉差!
 
本例下載位址:
http://www.dreams.idv.tw/~code6421/files/SLDataDemo1.zip

 

STM32踩坑--NoST-LINK detected 这里出现的NoST-LINK detected是没有扫描到端口 在我使用一段Fly-MCU后,有一天突然发现出现如上错误,再检查的过程中检查以下几点 1.STM32 魔术棒的设置 1.1Debug设置 1.2 utilities 设置没有问题,与原来一样又看了下端口——在设备管理器中;也没有问题 ... 阅读详情

相关推荐

l0phtcrack 7(爆破管理员密码)使用教程

l0phtcrack7简称lc7,是爆破计算机管理员密码的软件,早期是网络安全管理员用来检测系统用户是否使用了不安全的密码,后被黑客用于用户口令破解 功能:该工具支持远程破解,理论上能破解所有密码,但对复杂度比较高的密码,破解时间很长 使用前提:1.登录了需要破解的计算机 2.知道需要破解的计算机的一个管理员的账户,密码 ** 也许你会疑惑,我都知道了一个管理员账户密码了,还要另外的管理员密码...

Xiongcanne的博客 2万+

c# 自定义类型的DataBindings

自定义类型TextBoxEx,扩展了TextBox,增加了一个属性KeyText来保存后台的值(Tag已另作它用)。 程序里面需要将KeyText和DataTable的某个列绑定起来。 如果是TextBox,只需要简单处理即可: txt.DataBindings.Add("Text", dt, colName, false, DataSourceUpdateMode.OnProperty...

weixin_33861800的博客 789

别再被海康VisionMaster标定搞懵了!固定相机视觉引导,从标定到示教保姆级避坑指南

本文详细解析了海康VisionMaster在固定相机视觉引导中的标定与示教全流程,特别针对单相机标定提供了精简高效的4图标定法。从标定板准备到示教物理点设置,再到坐标转换与误差补偿,提供了一套完整的保姆级避坑指南,帮助工程师快速掌握固定相机视觉引导系统的核心技术。

weixin_30336061的博客 495

Silverlight 的 DataBindings

 Silverlight的Data Bindings:Silverlight 與 ASP.NET Ajax  文/黃忠成 不可否認,對於網頁美工人員或是動畫設計師而言,Silverlight提供了Flash以外的一個畫布,令她們可盡情揮灑創意!但對於設計師而言,Silverlight如何結合資料庫來呈現資料則是更具吸引力的課題,很明顯的!Silverlight 1.0 RC

黄忠成 5536

G2O (General Graph Optimization)入门及简单使用

g2o全称是General Graph Optimization,也就是图优化,我们在做SLAM后端或者更加常见的任何优化问题(曲线拟合)都可以使用G2O进行处理。

晓晨的博客 1万+

Ubuntu20.04下Pycharm的快速安装与配置指南

本文提供了一份详细的Ubuntu 20.04系统下PyCharm社区版的安装与配置指南。文章重点介绍了通过手动下载.tar.gz压缩包进行安装的灵活方法,并涵盖了系统准备、依赖安装、首次运行、创建快捷方式以及解释器配置等关键步骤,帮助Python开发者快速搭建高效、可控的本地开发环境。

weixin_28831341的博客 379

安卓 Data Binding 使用方法总结(姐姐篇)

在项目中使用到了 Data Binding,总结使用经验后写成本文。 本文涉及安卓自带框架 DataBinding 的基础使用方法,适合初次接触 Data Binding 的同学阅读。

关注移动端、Web、微信小程序等大前端领域 2万+

ADS中使用Momentum进行电源完整性分析示例

这个应用可以帮助工程师用更快的时间使用ADS Momentum完成PDN分析。该应用描述了利用ADS Momentum RF模拟器进行PDN分析的方法,大大缩短了计算时间。 该分析主要应用与高速数字设计。 在此应用中使用了以下ADS特性: ADS设计流程集成(ADFI)。 电磁协同仿真。 Momentum仿真。 仿真流程如下: 在Allegro中创建ADFI文件 要将Alleg...

zb6075_lb的专栏 7009

控件DataBindings绑定属性

控件DataBindings绑定属性后,数据源的属性和控件的属性就会同步变化。 直接上Demo: private Class1 obj = new Class1(); this.textBox1.DataBindings.Add(new Binding("Text", obj, "Title")); class Class1:INotifyPropertyChanged {...

q136780964的博客 5730

uniapp:人脸识别功能,已测试,直接复制源码,支持H5,APP安卓。不依赖任何js,SDK。

uniapp人脸识别功能,已测试可直接复制源码,支持H5,APP安卓。不依赖任何js,SDK。 APP效果图:

sunluyi的博客 2226

学Simulink--基础储能管理场景实例:基于Simulink的储能SOC均衡控制策略仿真

本文完成了基于 Simulink 的储能 SOC 均衡控制策略仿真,实现了:✅掌握并联系统 SOC 分化机理✅构建基于电流重分配的主动均衡架构✅验证均衡对系统可用容量的显著提升✅实现 SOC 偏差 < 2% 的高精度控制。

amy_mhd的博客 85

Silverlight 的 Data Bindings:Silverlight 與 ASP.NET Ajax

Silverlight 的 Data Bindings:Silverlight 與 ASP.NET Ajax 不可否認,對於網頁美工人員或是動畫設計師而言,Silverlight 提供了 Flash 以外的一個畫布,令她們可盡情揮灑創意!但對於設計師而言,Silverlight 如何結合資料庫來呈現資料則是更具吸引力的課題,很明顯的!Silverlight 1.0 RC 與 Silver...

weixin_34273046的博客 83

复数值神经网络可能是深度学习的未来

复数这种东西,在人的头脑中似乎抽象、似乎复杂,然而,对于计算机来说,一点也不抽象,不复杂,那么,将复数概念推广到神经网络会是什么结果呢?本篇介绍国外的一些同行的尝试实践,请我们注意观察他们的进展。

gongdiwudu的专栏 6615

[导入]Silverlight 的 Data Bindings:Silverlight 與 ASP.NET Ajax

摘要: 不可否認,對於網頁美工人員或是動畫設計師而言,Silverlight 提供了 Flash 以外的一個畫布,令她們可盡情揮灑創意!但對於設計師而言,Silverlight 如何結合資料庫來呈現資料則是更具吸引力的課題,很明顯的!Silverlight 1.0 RC 與 Silverlight 1.1 並不支援 Data Binding 機制,而且目前對於中文顯示仍存在著問題(下載字...

weixin_30797027的博客 74

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Web 版翻译者资料库

本项目是桌面版《翻译者资料库》的 Web 移植版,基于 Spring Boot 3.3、Thymeleaf、Bootstrap 5.3 与 MySQL 8.0 构建。它面向翻译写作提供资料、词汇、句库、文本工具、对照制作、查找、备份恢复及旧库迁移等功能,完整继承桌面版核心业务规则,支持一键启动与离线访问。

howard2005的专栏 140

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

React 性能:memo / useMemo / useCallback

讲清 memo/useMemo/useCallback 的配合与边界,先测量再优化,避开常见过早优化。

JudithHuang的博客 325

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 346

DSH (DeepSeek Harness) Windows 升级安装指南20261107

注意:如果在普通窗口执行 nvm 提示找不到命令,或执行 nvm use 提示 Access is denied,请务必关闭当前窗口,重新打开一个管理员CMD 执行上述完整路径命令。找到 .credentials.yaml,将其重命名为 .credentials.yaml.bak(备份并使其失效)。Node.js Storage Location:可改到非系统盘(如 D:\dev\nvm,避免路径含空格或中文)。打开文件资源管理器,进入 C:\Users<你的用户名>.dsh\。

fengye207161的博客 192

SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在

# SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在 > 这是一套基于 Spring Boot 的服装销售平台源码,配套 `db.sql` 建表脚本,业务覆盖商品展示、购物车、订单流转、收货地址、订单评价、商品评论、在线客服、轮播图和资讯。形态是**前后台双端**:前台是顾客逛的商城,后台是管理员管的控制台。本文带你看清里面有什么、怎么跑

面朝大海 226

微信小程序-wxs

在微信开发者工具中右键创建.wxs后缀的文件。每个.wxs文件也是一个独立模块,同样使用导出内容。示例(文件return d;FOO: foo,bar: bar(外联定义参考官方文档)

dreams_dream的博客 340

使用echarts模拟甘特图

项目中需按时间段展示不同颜色的数据,通过解析时长并统计各类型总时长,结合预设颜色映射表(含自定义与默认色),动态生成ECharts图表。利用sumByTypeName聚合数据,为每类分配对应颜色,实现图例与柱状图的精准匹配,确保多时段、多类型数据可视化清晰准确。

uuai 28

【技术专题】JavaScript 网页技术 - JavaScript 流程控制

小锋老师推出《一天学会JavaScript(无废话版)》视频教程,涵盖基础语法、流程控制、函数、数组对象、DOM操作及ES6新特性。内容精炼,配套课件与源码打包下载,助力快速入门。重点讲解if/else、switch、for/while循环、for...of/in遍历及break/continue使用场景,并通过成绩判断实例演示实际应用。适合零基础学习者高效掌握核心技能。

java1234的博客 161

基于 FastAPI+LangChain+LangGraph+Agent+Vue3+MySQL 的房产数据采集与房价预测分析平台

本文介绍一个完整的「房产数据采集+AI房价预测」全栈项目,涵盖FastAPI异步后端、LangGraph Agent智能问答、爬虫采集、机器学习预测与Vue3前端,实现从数据采集到AI交互的闭环。项目融合多技术栈,具备真实业务场景与生产级设计(如降级策略、流式输出、多模型对比),兼具简历亮点与答辩演示优势,可系统性提升工程能力,并附高频面试题解析,是理想的技术综合实践项目。

深耕开发,专注编程实战。分享源码解析、项目搭建、问题排查笔记,沉淀技术,持续更新。 229

Agent 的 ReAct、Plan、Execute、Reflection 模式

本文系统解析 Agent 的 ReAct、Plan、Execute、Reflection 四模式,揭示其核心为“下一步谁定”与“错了怎么发现”两大问题。ReAct 逐步决策,适合动态环境但易冗余;Plan 一次性规划,高效却惧变化;Execute 严格落地,需明确判据与失败策略;Reflection 事后校验,强化纠错闭环。四者协同:外层规划,执行中嵌入思考,每步后反思,连续失败才重规划,构建稳定可控的智能体工作流。

2401_89855466的博客 325

货运APP、货运小程序开发:网络货运平台与同城配送搬家系统实战

本文介绍一套完整的货运平台系统,涵盖货运APP、小程序、网络货运、同城配送、搬家预约等场景,基于SpringBoot+MyBatisPlus+MySQL技术栈,采用uni-app实现多端统一开发,配套TMS运输管理与物流管理系统,支持下单、派单、运输、结算全流程,适用于货运搬家、物流搬运与配送业务,可作为物流软件及TMS系统的参考实现。

juzige03的博客 218

Vue3 低代码移动表单设计器实战(二):缩放画布下的拖拽系统与树状级联数据结构

本文深入剖析Vue3低代码表单设计器在缩放画布下的拖拽失效问题,揭示SortableJS在CSS Transform下坐标崩溃的数学根源。通过自研独立视觉克隆壳层与逆向几何补偿算法,实现精准拖拽;采用扁平数据存储+运行时树状计算结构,解决级联依赖与深克隆难题,确保逻辑一致性与性能优化,为复杂低代码系统提供可复用的工程范式。

NanChen的博客 341
上一篇: stylehack blog open.//我的博客开张了.
下一篇: stylehack原创.windows下堆溢出的三种利用方式.
stylehack
博客等级 码龄19年 0粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值